SHARE
TWEET

Untitled

a guest Sep 1st, 2014 1,030 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * password_strength_plugin.js
  3.  * Copyright (c) 20010 myPocket technologies (www.mypocket-technologies.com)
  4.  
  5.  
  6.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  7.  * of this software and associated documentation files (the "Software"), to deal
  8.  * in the Software without restriction, including without limitation the rights
  9.  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10.  * copies of the Software, and to permit persons to whom the Software is
  11.  * furnished to do so, subject to the following conditions:
  12.  
  13.  * The above copyright notice and this permission notice shall be included in
  14.  * all copies or substantial portions of the Software.
  15.  
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22.  * THE SOFTWARE.
  23.  *
  24.  * @author Darren Mason (djmason9@gmail.com)
  25.  * @date 3/13/2009
  26.  * @projectDescription Password Strength Meter is a jQuery plug-in provide you smart algorithm to detect a password strength. Based on Firas Kassem orginal plugin - http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/
  27.  * @version 1.0.1
  28.  *
  29.  * @requires jquery.js (tested with 1.3.2)
  30.  * @param shortPass:    "shortPass",    //optional
  31.  * @param badPass:              "badPass",              //optional
  32.  * @param goodPass:             "goodPass",             //optional
  33.  * @param strongPass:   "strongPass",   //optional
  34.  * @param baseStyle:    "testresult",   //optional
  35.  * @param userid:               "",                             //required override
  36.  * @param messageloc:   1                               //before == 0 or after == 1
  37.  *
  38.  */
  39.  
  40. (function($){
  41.     $.fn.shortPass = 'Too short';
  42.     $.fn.longPass = 'Too long';
  43.     $.fn.badPass = 'Too weak';
  44.     $.fn.goodPass = 'Good';
  45.     $.fn.strongPass = 'Strong';
  46.     $.fn.samePassword = 'Username and Password identical.';
  47.     $.fn.containsSymbol = 'Symbol';
  48.     $.fn.invalidWord = 'Word not allowed';
  49.     $.fn.invalid = 'Invalid password';
  50.     $.fn.resultStyle = "";
  51.  
  52.     $.fn.passStrength = function(options) {
  53.         var passwordStrength;
  54.         var passwordConfirm;
  55.        
  56.         if($('.passwordStrength').hasClass('notRequired'))
  57.         {
  58.             $('form .validate').removeAttr('disabled').removeClass('disabled');
  59.         }
  60.         else
  61.         {
  62.         $('form .validate').attr('disabled', 'disabled').addClass('disabled');
  63.         var defaults = {
  64.             shortPass:          "shortPass",    //optional
  65.             longPass:           "longPass",         //optional
  66.             containsSymbol: "containsSymbol",       //optional
  67.             badPass:            "badPass",              //optional
  68.             goodPass:           "goodPass",             //optional
  69.             strongPass:         "strongPass",   //optional
  70.             invalid:        "invalid",  //optional
  71.             invalidWord:    "invalidWord",   //optional
  72.             baseStyle:          "testresult",   //optional
  73.             userid:                     "",                             //required override
  74.             messageloc:         1                               //before == 0 or after == 1
  75.         };
  76.         var opts = $.extend(defaults, options);
  77.  
  78.         return this.each(function() {
  79.             var obj = $(this);
  80.  
  81.             $(obj).unbind().keyup(function()
  82.             {
  83.  
  84.                 var results = $.fn.teststrength($(this).val(),$(opts.userid).val(),opts);
  85.  
  86.                 if(opts.messageloc === 1)
  87.                 {
  88.                     $(this).next("." + opts.baseStyle).remove();
  89.                     $(this).after("<span class=\""+opts.baseStyle+"\"><span></span></span>");
  90.                     $(this).next("." + opts.baseStyle).addClass($(this).resultStyle).find("span").text(results);
  91.                 }
  92.                 else
  93.                 {
  94.                     $(this).prev("." + opts.baseStyle).remove();
  95.                     $(this).before("<span class=\""+opts.baseStyle+"\"><span></span></span>");
  96.                     $(this).prev("." + opts.baseStyle).addClass($(this).resultStyle).find("span").text(results);
  97.                 }
  98.  
  99.                 if($('.confirmPassword').length == 0){
  100.                     passwordStrength = $('.testresult span').html();
  101.                     if(passwordStrength === "Good" || passwordStrength === "Strong"){
  102.                         $('form .validate').removeAttr('disabled').removeClass('disabled');
  103.                         $('.passwordStrength').removeClass('invalid');
  104.                         $('.passwordStrength .input').addClass('active');
  105.                     }
  106.                     else{
  107.                         $('form .validate').attr('disabled', 'disabled').addClass('disabled');
  108.                         $('.passwordStrength').addClass('invalid');
  109.                         $('.passwordStrength .input').removeClass('active');
  110.                     }
  111.                 }
  112.                 else{
  113.                     passwordStrength = $('.testresult span:eq(0)').html();
  114.                     passwordConfirm = $('.testresult span:eq(1)').html();
  115.                     if(passwordStrength === "Good" && passwordConfirm === "Good" || passwordStrength === "Strong" && passwordConfirm === "Strong"){
  116.                         $('form .validate').removeAttr('disabled').removeClass('disabled');
  117.                     }
  118.                     else{
  119.                         $('form .validate').attr('disabled', 'disabled').addClass('disabled');
  120.                     }
  121.                 }
  122.             });
  123.             //FUNCTIONS
  124.             $.fn.teststrength = function(password,username,option){
  125.                 var score = 0;
  126.  
  127.                 //password < 8
  128.                 if (password.length < 8 ) { this.resultStyle =  option.shortPass;return $(this).shortPass; }
  129.  
  130.                 //password > 10
  131.                 if (password.length > 10 ) { this.resultStyle =  option.longPass;return $(this).longPass; }
  132.  
  133.                 //password has a symbol
  134.                 if (!password.match(/^[a-z0-9]+$/i) && !(password.length > 10) && !(password.length < 8)){score -= 50; this.resultStyle =  option.invalid;return $(this).invalid;}
  135.  
  136.                 //password length
  137.                 score += password.length * 4;
  138.                 score += ( $.fn.checkRepetition(1,password).length - password.length ) * 1;
  139.                 score += ( $.fn.checkRepetition(2,password).length - password.length ) * 1;
  140.                 score += ( $.fn.checkRepetition(3,password).length - password.length ) * 1;
  141.                 score += ( $.fn.checkRepetition(4,password).length - password.length ) * 1;
  142.  
  143.                 //password has 3 numbers
  144.                 if (password.match(/(.*[0-9].*[0-9].*[0-9])/)){score += 15;}
  145.  
  146.                 //password has 2 symbols
  147.                 //if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){ score += 5 ;}
  148.  
  149.                 //password has Upper and Lower chars
  150.                 if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)){score += 25;}
  151. //                        if (password.match(/([a-zA-Z])/) || password.match(/([0-9])/)){
  152. //                             score += 25;
  153. //                        }
  154.                 //password has number and chars
  155.                 if (password.match(/([a-zA-Z][0-9])/)){
  156.                     var letters = password.replace(/[0-9$-]/g, "");
  157.                     var numbers = password.replace(/[A-Za-z$-]/g, "");
  158.                     score += 15;
  159.                     var countLetters = 0;
  160.                     var countNumbers = 0;
  161.                     var i;
  162.                     for (i = 1; i < letters.length; i++){
  163.                         var last = letters.charCodeAt(i-1);
  164.                         var current = letters.charCodeAt(i);
  165.                         if((current - last) == 1){
  166.                             countLetters = countLetters + 1;
  167.                         }
  168.                     }
  169.                     for (i = 1; i < numbers.length; i++){
  170.                         var last = numbers.charCodeAt(i-1);
  171.                         var current = numbers.charCodeAt(i);
  172.                         if((current - last) == 1){
  173.                             countNumbers = countNumbers + 1;
  174.                         }
  175.                     }
  176.                     //reverse sequence
  177. //                             for (i = password.length - 1; i >= 0; i--){
  178. //                                 var last = password.charCodeAt(i+1);
  179. //                                 var current = password.charCodeAt(i);
  180. //                                 if((current - last) == 1){
  181. //                                     count = count + 1;
  182. //                                 }
  183. //                             }
  184.                     if(countLetters >= 2 && countNumbers >= 2){
  185.                         score -= 50;
  186.                         //console.log("sequence");
  187.                     }
  188.                 }
  189.                 //
  190.                 //password has number and symbol
  191.                 // if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)){score += 15;}
  192.  
  193.                 //password has char and symbol
  194.                 // if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)){score += 15;}
  195.  
  196.                 //password is just a numbers or chars
  197.                 if (password.match(/^\w+$/) || password.match(/^\d+$/) ){score -= 10;}
  198.  
  199.                 //if first char is not a letter or contains space
  200.                 if (!password.match(/^[a-zA-Z].*$/) || password.match(/\s+/g,'')){score -= 50; this.resultStyle =  option.invalid;return $(this).invalid;}
  201.                 if (password.match(/\s+/g,'')){score -= 50;}
  202.                 function unacceptable(pwd){
  203.                     var badPassArray = [
  204.                         "abc123",
  205.                         "anal",
  206.                         "anus",
  207.                         "arse",
  208.                         "ass",
  209.                         "bastard",
  210.                         "bitch",
  211.                         "blacktwat",
  212.                         "bollock",
  213.                         "bollocks",
  214.                         "bollox",
  215.                         "bolox",
  216.                         "boner",
  217.                         "bugger",
  218.                         "bumboy",
  219.                         "clit",
  220.                         "clitoris",
  221.                         "cnut",
  222.                         "cock",
  223.                         "coon",
  224.                         "cunt",
  225.                         "dago",
  226.                         "dick",
  227.                         "dickhead",
  228.                         "dong",
  229.                         "fag",
  230.                         "faggot",
  231.                         "fart",
  232.                         "finian",
  233.                         "fisting",
  234.                         "flange",
  235.                         "fuck",
  236.                         "fucker",
  237.                         "fucking",
  238.                         "fuckoff",
  239.                         "fuckyou",
  240.                         "gay",
  241.                         "gayboy",
  242.                         "gaylord",
  243.                         "gollywog",
  244.                         "gook",
  245.                         "hardon",
  246.                         "homo",
  247.                         "hooker",
  248.                         "jizz",
  249.                         "kkk",
  250.                         "lesbo",
  251.                         "lezbo",
  252.                         "lezzer",
  253.                         "manlove",
  254.                         "minge",
  255.                         "molest",
  256.                         "molesting",
  257.                         "mongol",
  258.                         "nig",
  259.                         "nigger",
  260.                         "nignog",
  261.                         "password",
  262.                         "paki",
  263.                         "pederast",
  264.                         "pedo",
  265.                         "pedofilia",
  266.                         "pedophile",
  267.                         "penis",
  268.                         "pervert",
  269.                         "piss",
  270.                         "poof",
  271.                         "poofter",
  272.                         "pubes",
  273.                         "queer",
  274.                         "quim",
  275.                         "rape",
  276.                         "rapist",
  277.                         "rentboy",
  278.                         "semen",
  279.                         "shit",
  280.                         "shite",
  281.                         "slag",
  282.                         "slit",
  283.                         "slut",
  284.                         "spastick",
  285.                         "spaz",
  286.                         "spaztick",
  287.                         "sperm",
  288.                         "spunk",
  289.                         "tossa",
  290.                         "tosser",
  291.                         "turd",
  292.                         "twat",
  293.                         "vag",
  294.                         "vagin",
  295.                         "vagina",
  296.                         "virgin",
  297.                         "wank",
  298.                         "wanker",
  299.                         "welcome",
  300.                         "whore",
  301.                         "wog"
  302.                     ];
  303.                     var re = new RegExp(badPassArray.join("|"), "i");
  304.                     return(pwd.match(re) != null);
  305.                 }
  306.                 if(unacceptable(password)){
  307.                     score -= 50;
  308.                     this.resultStyle =  option.invalidWord;return $(this).invalidWord;
  309.                 }
  310.                 if(password.match(/([0-9])/)){
  311.                     score += 10;
  312.                 }
  313.                 else{
  314.                     score -= 50;
  315.                 }
  316.                 //console.log(score);
  317.                 //verifying 0 < score < 100
  318.                 if ( score < 0 ){score = 0;}
  319.                 if ( score > 100 ){  score = 100;}
  320.  
  321.                 if (score < 46){ this.resultStyle = option.badPass; return $(this).badPass;}
  322.                 if (score < 80){ this.resultStyle = option.goodPass;return $(this).goodPass;}
  323.  
  324.                 this.resultStyle= option.strongPass;
  325.                 return $(this).strongPass;
  326.             };
  327.  
  328.         });
  329.         }
  330.     };
  331. })(jQuery);
  332.  
  333. $.fn.checkRepetition = function(pLen,str) {
  334.     var res = "";
  335.     for (var i=0; i<str.length ; i++ )
  336.     {
  337.         var repeated=true;
  338.  
  339.         for (var j=0;j < pLen && (j+i+pLen) < str.length;j++){
  340.             repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen));
  341.         }
  342.         if (j<pLen){repeated=false;}
  343.         if (repeated) {
  344.             i+=pLen-1;
  345.             repeated=false;
  346.         }
  347.         else {
  348.             res+=str.charAt(i);
  349.         }
  350.     }
  351.     return res;
  352. };
  353.  
  354. $(document).ready(function(){
  355.     var strength = $('.testresult span').html();
  356.     $('.passwordStrength').passStrength();
  357.     $('a.showSteps').live("click", function(){
  358.         if(!$('#stepChange').is(":visible")){
  359.             $('#stepChange').slideDown();
  360.         }
  361.         else{
  362.             $('#stepChange').slideUp();
  363.         }
  364.     });
  365.     $('.passwordStrength').live('focus',function(){
  366.         if($('.passwordStrength').val() == ""){
  367.             $('.testresult').hide();
  368.         }
  369.         else{
  370.             $('.testresult').show();
  371.         }
  372.     });
  373.     $('.passwordStrength').live('blur',function(){
  374.         if($('.passwordStrength').val() == ""){
  375.             $('.testresult').hide();
  376.         }
  377.     });
  378.     $('.passwordStrength').live('keyup',function(){
  379.         if($('.passwordStrength').val() == ""){
  380.             $('.testresult').hide();
  381.         }
  382.         if($('.testresult span').html() === "Good" || $('.testresult span').html() === "Strong"){
  383.             $('form .validate').removeAttr('disabled').removeClass('disabled');
  384.         }
  385.     })
  386.     //trigger the form submit when clicking in password prompt page
  387.     $('.submitConfirm').live("click", function(){
  388.         $('#login').submit();
  389.     });
  390.     function fadeInPrompt(){
  391.         $('.signInForm').hide();
  392.         $('.confirmPrompt').show();
  393.     }
  394. })
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top