import org.cacert.gigi.util.Notary;
import org.cacert.gigi.util.PasswordHash;
import org.cacert.gigi.util.PasswordStrengthChecker;
+import org.cacert.gigi.util.TimeConditions;
/**
* Represents an acting, assurable, user. Synchronizing on user means: no
public static final int MINIMUM_AGE = 16;
+ public static final int MAXIMUM_PLAUSIBLE_AGE = 120;
+
public static final int POJAM_AGE = 14;
public static final int ADULT_AGE = 18;
public static final boolean POJAM_ENABLED = false;
+ public static final int EXPERIENCE_POINTS = 4;
+
/**
* Time in months a verification is considered "recent".
*/
- public static final int VERIFICATION_MONTHS = 39;
+ public static final int VERIFICATION_MONTHS = TimeConditions.getInstance().getVerificationMonths();
private Name preferredName;
if (getReceivedAssurances().length != 0) {
throw new GigiApiException("No change after assurance allowed.");
}
+
+ if ( !CalendarUtil.isOfAge(dob, User.MINIMUM_AGE)) {
+ throw new GigiApiException("Entered date of birth is below the restricted age requirements.");
+ }
+
+ if (CalendarUtil.isOfAge(dob, User.MAXIMUM_PLAUSIBLE_AGE)) {
+ throw new GigiApiException("Entered date of birth exceeds the maximum age set in our policies. Please check your DoB is correct and contact support if the issue persists.");
+ }
this.dob = dob;
rawUpdateUserData();
}
int points = 0;
if (rs.next()) {
- points = rs.getInt(1) * 2;
+ points = rs.getInt(1) * EXPERIENCE_POINTS;
}
return points;
*
* @return the maximal points @
*/
+ @SuppressWarnings("unused")
public int getMaxAssurePoints() {
if ( !CalendarUtil.isOfAge(dob, ADULT_AGE) && POJAM_ENABLED) {
return 10; // PoJAM
int exp = getExperiencePoints();
int points = 10;
- if (exp >= 10) {
+ if (exp >= 5 * EXPERIENCE_POINTS) {
points += 5;
}
- if (exp >= 20) {
+ if (exp >= 10 * EXPERIENCE_POINTS) {
points += 5;
}
- if (exp >= 30) {
+ if (exp >= 15 * EXPERIENCE_POINTS) {
points += 5;
}
- if (exp >= 40) {
+ if (exp >= 20 * EXPERIENCE_POINTS) {
points += 5;
}
- if (exp >= 50) {
+ if (exp >= 25 * EXPERIENCE_POINTS) {
points += 5;
}
public synchronized Assurance[] getReceivedAssurances() {
if (receivedAssurances == null) {
- try (GigiPreparedStatement query = new GigiPreparedStatement("SELECT * FROM `notary` INNER JOIN `names` ON `names`.`id` = `notary`.`to` WHERE `names`.`uid`=? AND `notary`.`deleted` IS NULL")) {
+ try (GigiPreparedStatement query = new GigiPreparedStatement("SELECT * FROM `notary` INNER JOIN `names` ON `names`.`id` = `notary`.`to` WHERE `names`.`uid`=? AND `notary`.`deleted` IS NULL ORDER BY `when` DESC")) {
query.setInt(1, getId());
GigiResultSet res = query.executeQuery();
public synchronized Assurance[] getMadeAssurances() {
if (madeAssurances == null) {
- try (GigiPreparedStatement query = new GigiPreparedStatement("SELECT * FROM notary WHERE `from`=? AND deleted is NULL")) {
+ try (GigiPreparedStatement query = new GigiPreparedStatement("SELECT * FROM notary WHERE `from`=? AND deleted is NULL ORDER BY `when` DESC")) {
query.setInt(1, getId());
try (GigiResultSet res = query.executeQuery()) {
}
- public Name getPreferredName() {
+ public synchronized Name getPreferredName() {
return preferredName;
}