88 lines
2.8 KiB
Java
88 lines
2.8 KiB
Java
package de.srsoftware.widerhall;
|
|
|
|
import de.srsoftware.examples.translations.App;
|
|
import de.srsoftware.tools.translations.Translation;
|
|
|
|
import java.net.URLEncoder;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.security.MessageDigest;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.regex.Pattern;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class Util {
|
|
|
|
private static final MessageDigest SHA256 = getSha256();
|
|
private static final String EMAIL_PATTERN = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";
|
|
|
|
public static String urlEncode(Map<String, Object> data) {
|
|
String params = data.entrySet()
|
|
.stream()
|
|
.map(entry -> encode(entry.getKey()) + "=" + encode(entry.getValue()))
|
|
.collect(Collectors.joining("&"));
|
|
return params;
|
|
}
|
|
|
|
private static String encode(Object value) {
|
|
return URLEncoder.encode(value.toString(), StandardCharsets.UTF_8);
|
|
}
|
|
|
|
|
|
public static MessageDigest getSha256() {
|
|
try {
|
|
return MessageDigest.getInstance("SHA-256");
|
|
} catch (NoSuchAlgorithmException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static String sha256(String s) {
|
|
byte[] bytes = SHA256.digest(s.getBytes(StandardCharsets.UTF_8));
|
|
return hex(bytes);
|
|
}
|
|
|
|
private static String hex(byte[] bytes) {
|
|
StringBuffer buf = new StringBuffer(bytes.length*2);
|
|
for (var byt : bytes) buf.append(hex(byt));
|
|
return buf.toString();
|
|
}
|
|
|
|
private static String hex(byte b){
|
|
return (b<16 ? "0" : "") + Integer.toHexString(b);
|
|
}
|
|
|
|
public static String t(String tx, Object ... fills){
|
|
return Translation.get(Application.class,tx,fills);
|
|
}
|
|
|
|
public static boolean isEmail(String email) {
|
|
return email.matches(EMAIL_PATTERN);
|
|
}
|
|
|
|
public static boolean simplePassword(String pass) {
|
|
if (pass.length() < 6) return true;
|
|
if (pass.length() < 8){
|
|
for (int i=0; i<pass.length();i++){
|
|
if (!Character.isLetterOrDigit(pass.charAt(i))) return false; // password contains special character
|
|
}
|
|
}
|
|
if (pass.length() < 10){
|
|
var digit = false;
|
|
var letter = false;
|
|
for (int i=0; i<pass.length();i++){
|
|
char c = pass.charAt(i);
|
|
if (!Character.isLetterOrDigit(c)) return false; // password contains special character
|
|
digit |= Character.isDigit(c);
|
|
letter |= Character.isLetter(c);
|
|
if (letter && digit) return false; // password contains letters and digits
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|