Thursday, November 22, 2012

Encrypt and decrypt string using AES algorithm using Java

Encrypt and decrypt string or bytes using AES algorithm performed by Java code. below is the code snippet. 

package com.pkm;

import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class EncryptUtils {
    private static String algorithm = "AES";
    private static byte[] keyValue = "1111111111111111".getBytes();
    private static SecureRandom iv = new SecureRandom("192837465UTYELBN".getBytes());
    
    public static void main(String[] args) throws Exception {
        String valueToEncrypt = "Some value";
        String encryptedValue = encrypt(valueToEncrypt);
        System.out.println("Encrypted=" + encryptedValue);
        
        String afterDecrypt = decrypt(encryptedValue);
        System.out.println("Decrypted=" + afterDecrypt);
    }

    static String encrypt(String value) throws Exception {
        Key key = generateKey();
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
        byte [] encByte = cipher.doFinal(value.getBytes());
        String encString = new BASE64Encoder().encode(encByte);
        return encString;
    }

    static String decrypt(String value) throws Exception {
        Key key = generateKey();
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte [] decByte64 = new BASE64Decoder().decodeBuffer(value);
        byte [] decByte = cipher.doFinal(decByte64);
        String decString = new String(decByte);
        return decString;
    }

    static private Key generateKey() throws Exception {
        return new SecretKeySpec(keyValue, algorithm);
    }
}


Below is output:

Original=Some value
Encrypted=i4he5mR49eRkWmQRVh12yg==
Decrypted=Some value



Install Qmail and Vpopmail in Linux Server



1. For Linux Server
2. Required packages

There are four packages needed for this qmail install.

2.1 netqmail-1.06.tar.gz
qmail is a secure, reliable, efficient, simple message transfer agent. It is designed for typical Internet-connected UNIX hosts. As of October 2001, qmail is the second most common SMTP server on the Internet, and has by far the fastest growth of any SMTP server.

2.2 ucspi-tcp-0.88.tar.gz
It is a tool similar to inetd. ucspi-tcp listens in 25 port and spawns qmail-smtpd when required. ucspi-tcp stands for Unix Client Server Program Interface for TCP.

2.3 daemontools-0.76.tar.gz
daemontools is actually a tool to manage & monitor daemons linux. It is used in qmail as well to manage qmail daemons.

2.4 checkpassword-0.90.tar.gz
checkpassword provides a simple, uniform password-checking interface to all root applications. It is suitable for use by applications such as login, ftpd, and pop3d.

3. Qmail Install

3.1 Get the files

Download files and place them into the /usr/local/src directory. This document refers to that directory for install procedures.

========================================================
cd /usr/local/src
wget
http://www.qmail.org/netqmail-1.06.tar.gz
wget
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
wget
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
=========================================================

Now create /package directory and move daemontools-0.76.tar.gz to /package.

=========================================================
mkdir /package
mv -iv /usr/local/src/daemontools-0.76.tar.gz /package
=========================================================

3.2 Create users and groups

Run following commands one by one, to create required users & groups

==============================================
groupadd nofiles
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
useradd -g nofiles -d /var/qmail/alias alias
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails
==============================================

3.3 Compile & Install

Untar the Qmail source

============================
cd /usr/local/src
tar -xzvf netqmail-1.06.tar.gz
===========================

Compile the source

===================================
cd /usr/local/src/netqmail-1.06
make setup check
===================================

4. Configure Qmail

4.1 Post Installation setup

Post installation configuration can be done by running following script.

=============
./config;
==============

4.2 Configure Qmail aliases.

Create a user named "adminmails" to receive all administrator emails.

================================================
useradd adminmails;
cd ~alias;
echo "adminmails" > .qmail-postmaster;
echo "adminmails" > .qmail-mailer-daemon;
echo "adminmails" > .qmail-root;
echo "adminmails" > .qmail-postmaster;
echo "adminmails" > .qmail-abuse;
chmod 644 ~alias/.qmail* ;
==============================================

Create Maildir for "adminmails" user

========================================
su - adminmails
/var/qmail/bin/maildirmake ~/Maildir
========================================


4.3 Configure Qmail to use Maildir

Now we need to configure qmail to use the Maildir Format.

Create "/var/qmail/rc" with following contents.

====================================================================================

#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"

=====================================================================================

Make "/var/qmail/rc" executable

============================

chmod 755 /var/qmail/rc

============================

Create "/var/qmail/control/defaultdelivery" file.

=====================================================

echo ./Maildir/ >/var/qmail/control/defaultdelivery

=====================================================

4.4 Replace Sendmail binaries

======================================================
chmod 0 /usr/lib/sendmail ;
chmod 0 /usr/sbin/sendmail ;
mv /usr/lib/sendmail /usr/lib/sendmail.bak ;
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ;
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ;
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
=======================================================

5. Install ucspi-tcp

Untar the ucspi-tcp source.

=============================================================
cd /usr/local/src/
tar -xzvf ucspi-tcp-0.88.tar.gz
==============================================================

Patch ucspi-tcp with "ucspi-tcp-0.88.errno.patch" provided with net qmail.

==============================================================================
cd ucspi-tcp-0.88
patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
===============================================================================

Install ucspi-tcp.

========================
make
make setup check
=========================

6. Install checkpassword

Untar checkpassword source.

=========================================
cd /usr/local/src
tar -xzvf checkpassword-0.90.tar.gz
=========================================

Patch checkpassword with "checkpassword-0.90.errno.patch" provided with net qmail.

================================================================
cd checkpassword-0.90
patch < /usr/local/src/netqmail-1.06/other-patches/checkpassword-0.90.errno.patch
================================================================

Install checkpassword.

==================================
make ;
make setup check
==================================

7. Install daemontools

Untar the daemontools source

=========================================
cd /package
tar -xzvf daemontools-0.76.tar.gz
=========================================

Patch daemontools with "daemontools-0.76.errno.patch" provided with net qmail.

=========================================================================
cd /package/admin/daemontools-0.76/src
patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
=========================================================================

Install daemontools

====================
cd ..
package/install
====================

8. Qmail Startup script

The "qmailctl" script is used as startup script for qmail.

8.1 Download qmailctl

===========================================================
cd /var/qmail/bin/
wget
http://lifewithqmail.org/qmailctl-script-dt70
===========================================================

8.2 Setup qmailctl

========================================
mv -iv qmailctl-script-dt70 qmailctl
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
========================================

8.3 Modify qmailctl for qmail-pop3d

Add following lines to qmailctl's "start" section.

========================================================================
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
else
echo qmail-pop3d supervise not running
fi
========================================================================

Add following lines to qmailctl's "stop" section.

======================================================================
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
======================================================================

Add following lines to qmailctl's "stat" section.

=======================================
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
=======================================

Add the following lines to qmailctl's "pause" section.

=======================================
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
=======================================

Add following lines to qmailctl's "cont" section.

=======================================
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
=======================================

Add following lines to qmailctl's "restart" section.

=========================================================
echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log
=========================================================


9. Setup qmail-send & qmail-smtpd

9.1 Create supervise script directories for qmail daemons

Create supervise directories for qmail-send, qmail-smtpd & qmail-pop3d.

======================================================
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-pop3d/log
======================================================

9.2 Create supervise script for qmail-send

Create supervise script for qmail-send with name "/var/qmail/supervise/qmail-send/run".

The file should have following contents.

====================
#!/bin/sh
exec /var/qmail/rc
====================

9.3 qmail-send log daemon supervise script

Create qmail-send log daemon supervise script with name "/var/qmail/supervise/qmail-send/log/run".

The script should have following contents

===========================================================
 #!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
======================================================================================

9.4 qmail-smtpd daemon supervise script

Create qmail-smtpd daemon supervise script with name "/var/qmail/supervise/qmail-smtpd/run".

The script should have following contents

=========================================================================================
#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi

exec /usr/local/bin/softlimit -m 9000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
==========================================================================================

Create the concurrencyincoming control file.

======================================================
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
======================================================

9.5 qmail-smtpd log daemon supervise script

Create qmail-smtpd log daemon supervise script with name "/var/qmail/supervise/qmail-smtpd/log/run".

The script should have following contents

========================================================================================
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
========================================================================================

9.6 qmail-pop3d daemon supervise script

Create qmail-pop3d daemon supervise script with name "/var/qmail/supervise/qmail-pop3d/run" .

The script should have contents.

=================================================================================
#!/bin/sh
exec /usr/local/bin/softlimit -m 9000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1
=================================================================================

Please replace FQDN with fully qualified domain name of the POP server
E.g: pop.example.com

9.7 qmail-pop3d log daemon supervise script

Create qmail-pop3d log daemon supervise script with name "/var/qmail/supervise/qmail-pop3d/log/run".

The script should have following contents

====================================================================
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail/pop3d
====================================================================

9.8 Create the log directories and add execute permissions on the run scripts.

=====================================================
mkdir -p /var/log/qmail/smtpd
mkdir /var/log/qmail/pop3d

chown qmaill /var/log/qmail
chown qmaill /var/log/qmail/smtpd
chown qmaill /var/log/qmail/pop3d

chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run

chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
======================================================

10. Create soft link for the daemons in /service folder

10.1 Add qmail-send to /service folder

=================================================================
ln -s /var/qmail/supervise/qmail-send /service/qmail-send
=================================================================

10.2 Add qmail-smtpd to /service folder

===================================================================
ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
===================================================================

10.3 Add qmail-pop3d in /service folder.

=====================================================================
ln -s /var/qmail/supervise/qmail-pop3d /service/qmail-pop3d
=====================================================================

Note 1: The /service directory is created when daemontools is installed.

Note 2: The qmail system will start automatically shortly after these links are created.

If you don't want it running now, do: qmailctl stop



Reference
1.
http://tac-au.com/howto/qmail-mini-HOWTO.txt
4. http://kmaiti.blogspot.com/2010/05/how-to-install-qmail.html


Friday, September 21, 2012

jQuery change browser url, page content, title without loading full page

Its a jQuery technique.

TO CHANGE PAGE URL:
window.history.pushState("object or string", "Title", "/new-url");
 
TO CHANGE PAGE TITLE:
document.title = "NEW PAGE TITLE"; 
 
TO CHANGE PAGE CONTENT:
jQuery("body").html("SUCCESS"); 
 
FOR MORE INFO:
https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history 

Thursday, July 26, 2012

Send Email Using CakePhp 2.0.6 and CakeEmail

Edit app/Config/email.php
public $default = array(
        'transport' => 'Smtp',
        'host' => '',
        'port' => 25,
        'timeout' => 300,
        'username' => '',
        'password' => '',
        'charset' => 'utf-8',
        'headerCharset' => 'utf-8',
    );

Create a component in app/Controller/Component as EmailHandlerServiceComponent.php
<?php
    class EmailHandlerServiceComponent extends Object {
        var $controller;

        public function sendEmail($to = "", $from = "", $fromName = "", $subject = "No Subject", $values = array())
        {
            App::uses('CakeEmail', 'Network/Email');
            $emailSender = new CakeEmail('default');
            $emailSender->to($to);
            $emailSender->subject(utf8Encode($subject));
            $emailSender->from(array($from=>$fromName));
            $emailSender->emailFormat('both');
            $emailSender->viewVars($values);
            $emailSender->template("first", "default");
            if ($emailSender->send()) {
                return true;
            } else {
                return false;
            }
        }
    }
?>

Create a file app/View/Layouts/Emails/html/default.php
Create a file app/View/Layouts/Emails/text/default.php 

Create a file app/View/Emails/html/first.php  
Create a file app/View/Emails/text/first.php 

Call sendEmail() from any controller.

You May Need To Edit app/lib/Cake/Network/Email/CakeEmail.php to set $this->charset and $this->_appCharset, set them to "utf-8" as default. 

Tuesday, July 10, 2012

Change apache port number

Just go to <XAMP LOCATION>\xampp\apache\conf
Open conf.httpd and search for 'Listen' and change port number you wish.

conf.httpd
in browser, add ':81' or your port number after localhost

Sunday, May 20, 2012

Upload file to server using ajax and php

Include jquery.form.js and jquery.min.js

<script type="text/javascript" src="/js/jquery.form.js"></script>
<script type="text/javascript" src="/js/jquery.min.js"></script>

jQuery("#contact-form").ajaxForm({
    beforeSubmit: function() {
        jQuery.showBackgroundWorkingState();
    },
    success: function(data) {
        /*console.log(data);*/
        try {
            if(data == CONSTANT_JS_SUCCESS_CODE) {

            } else {
                jQuery.showWarning("Error uploading file, please try again later.");       
            }
        } catch ( ex ) {
            jQuery.showWarning("Error uploading file, please try again later.");
        }
        jQuery.hideBackgroundWorkingState();
    },
    error: function() {
        jQuery.showWarning("Error uploading file, please try again later.");
        jQuery.hideBackgroundWorkingState();
    }
}).submit(); 
 
File save using php script:

<?php
$name = $_FILES['photoimg']['name'];
list($txt, $ext) = explode(".", $name);
$tmp = $_FILES['photoimg']['tmp_name'];
$docRoot = $_SERVER["DOCUMENT_ROOT"];
$imageLocation = $docRoot . "/app/webroot/img/";
$actual_image_name = time().substr(str_replace(" ", "_", $txt), 5).".".$ext;
if(move_uploaded_file($tmp, $imageLocation.$actual_image_name)) {
    die("1");
}
die("0"); 
?>

Image crop using jquery and php

Download jquery plugin from: http://code.google.com/p/jcrop/

create a folder named: crop

create a folder named: css

create a folder named: img

create a folder named: js

move Jcrop.jpg and jquery.Jcrop.min.css to /css folder

move jquery.color.js, jquery.Jcrop.js and jquery.min.js to /js folder

place a image named pool.jpg to /img folder

create a file index.php:

<?php
<link rel="stylesheet" type="text/css" href="/css/jquery.Jcrop.min.css" /> 
<script type="text/javascript" src="/js/jquery.color.js"></script> 
<script type="text/javascript" src="/js/jquery.Jcrop.js"></script>

?>
<img src="/img/pool.jpg" id="cropbox" alt="Flowers" />
<script type="text/javascript">

    jQuery(function($){
        jQuery('#cropbox').Jcrop({
            onChange: showCoords,
            onSelect: showCoords
        });
        function showCoords(c)
        {
            jQuery('#x1').val(c.x);
            jQuery('#y1').val(c.y);
            jQuery('#x2').val(c.x2);
            jQuery('#y2').val(c.y2);
            jQuery('#w').val(c.w);
            jQuery('#h').val(c.h);
        };
        $("#imageResizeValirables").submit(function() {
            var formData = $(this).serialize();
            $.post('/action.php', formData, function(returnData) {
                if(returnData == 'success') {
                    $("#croppedImage").attr("src", "/crop/"+$("#beCroppedImage").attr("value") + "?" + new Date().getTime());
                } else {
                    alert("Try again please.");
                }
            });
        });
    });

</script>

<form onsubmit="return false;" id="imageResizeValirables" class="coords">
    <input type="hidden" id="beCroppedImage" name="img" value="pool.jpg">
    <input type="hidden" size="4" id="x1" name="x1" />
    <input type="hidden" size="4" id="y1" name="y1" />
    <input type="hidden" size="4" id="x2" name="x2" />
    <input type="hidden" size="4" id="y2" name="y2" />
    <input type="hidden" size="4" id="w" name="w" />
    <input type="hidden" size="4" id="h" name="h" />
    <input type="submit" value="Resize">
</form>
<img id="croppedImage" alt='' />

create another file action.php

$docRoot = $_SERVER["DOCUMENT_ROOT"];
$imageLocation = $docRoot . "/app/webroot/img/" . $_POST["img"];
$newImageLocation = $docRoot . "/app/webroot/crop/" . $_POST["img"];
 if (file_exists($imageLocation)) {
     list($current_width, $current_height) = getimagesize($imageLocation);
     $x1 = (int) $_POST['x1'];
     $y1 = (int) $_POST['y1'];
     $x2 = (int) $_POST['x2'];
     $y2 = (int) $_POST['y2'];
     $w = (int) $_POST['w'];
     $h = (int) $_POST['h'];

      $crop_width = $w;
      $crop_height = $h;
      $new = imagecreatetruecolor($crop_width, $crop_height);
      $current_image = imagecreatefromjpeg($imageLocation);
      imagecopyresampled($new, $current_image, 0, 0, $x1, $y1, $crop_width, $crop_height, $w, $h);
      imagejpeg($new, $newImageLocation, 100);
      echo "success";
      exit;
 }
 echo "fail";
 exit;