1 package org.eparapher.core.crypto.tools;
2
3 import java.util.regex.Pattern;
4
5 import org.eparapher.core.EParapherManager;
6
7
8
9
10
11
12
13
14
15 public class PasswordPolicyManager {
16
17 private static PasswordPolicyManager instance = null;
18
19 private final Pattern password_8chars_regexp = Pattern.compile("[A-Za-z0-9\\W]{8,}");
20 private final Pattern one_upper_regexp = Pattern.compile(".*[A-Z].*");
21 private final Pattern one_lower_regexp = Pattern.compile(".*[a-z].*");
22 private final Pattern one_number_regexp = Pattern.compile(".*[0-9].*");
23 private final Pattern one_special_char = Pattern.compile(".*\\W.*");
24
25 private Pattern min_char_length_regexp;
26 private Pattern min_upper_regexp;
27 private Pattern min_lower_regexp;
28 private Pattern min_number_regexp;
29 private Pattern min_special_char;
30
31 public static PasswordPolicyManager getIstance() {
32 if (instance==null)
33 instance = new PasswordPolicyManager();
34 return instance;
35 }
36
37 private PasswordPolicyManager() {
38 compileregexp();
39 }
40
41 public void compileregexp() {
42 min_char_length_regexp = Pattern.compile("[A-Za-z0-9\\W]{"+EParapherManager.getInstance().getSettings().getSecPolMinCharLength()+",}");
43
44 min_upper_regexp = Pattern.compile( regexpbuilder(".*[A-Z]",EParapherManager.getInstance().getSettings().getSecPolMinUpperChar()) );
45 min_lower_regexp = Pattern.compile( regexpbuilder(".*[a-z]",EParapherManager.getInstance().getSettings().getSecPolMinLowerChar()) );
46 min_number_regexp = Pattern.compile( regexpbuilder(".*[0-9]",EParapherManager.getInstance().getSettings().getSecPolMinNumberChar()) );
47 min_special_char = Pattern.compile( regexpbuilder(".*\\W", EParapherManager.getInstance().getSettings().getSecPolMinSpecialChar()));
48 }
49
50 private String regexpbuilder(String singleregexp, int max) {
51 String temp_regexp = "";
52 for (int i = 0; i < max; i++)
53 temp_regexp += singleregexp;
54 return temp_regexp;
55 }
56
57 public boolean isMinCharsCheck(String secret) {
58 return min_char_length_regexp.matcher(secret).find();
59 }
60 public boolean isMinUpperCheck(String secret) {
61 return min_upper_regexp.matcher(secret).find();
62 }
63 public boolean isMinLowerCheck(String secret) {
64 return min_lower_regexp.matcher(secret).find();
65 }
66 public boolean isMinNumberCheck(String secret) {
67 return min_number_regexp.matcher(secret).find();
68 }
69 public boolean isMinSpecialCheck(String secret) {
70 return min_special_char.matcher(secret).find();
71 }
72
73 public boolean isSecPolicyValidated(String secret) {
74 boolean returnvalue = true;
75 if (EParapherManager.getInstance().getSettings().isSecPolCheckCharLength())
76 if ( !isMinCharsCheck(secret) )
77 returnvalue = false;
78
79 if (EParapherManager.getInstance().getSettings().isSecPolCheckUpperChar())
80 if ( !isMinUpperCheck(secret) )
81 returnvalue = false;
82
83 if (EParapherManager.getInstance().getSettings().isSecPolCheckLowerChar())
84 if ( !isMinLowerCheck(secret) )
85 returnvalue = false;
86
87 if (EParapherManager.getInstance().getSettings().isSecPolCheckNumberChar())
88 if ( !isMinNumberCheck(secret) )
89 returnvalue = false;
90
91 if (EParapherManager.getInstance().getSettings().isSecPolCheckSpecialChar())
92 if ( !isMinSpecialCheck(secret) )
93 returnvalue = false;
94 return returnvalue;
95 }
96
97 public int getPasswordStrength(String secret) {
98 int i=0;
99 if (password_8chars_regexp.matcher(secret).find())
100 i++;
101 if (one_upper_regexp.matcher(secret).find())
102 i++;
103 if (one_lower_regexp.matcher(secret).find())
104 i++;
105 if (one_number_regexp.matcher(secret).find())
106 i++;
107 if (one_special_char.matcher(secret).find())
108 i++;
109 return i;
110 }
111 }