]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/EmailAddress.java
Merge remote-tracking branch 'origin/emailMgmt'
[gigi.git] / src / org / cacert / gigi / EmailAddress.java
index fda01ed06b69de28005be3555b2760b283a199e7..a2a7e5801d8566ef88b5c7fd59840650a77204d1 100644 (file)
@@ -1,16 +1,20 @@
 package org.cacert.gigi;
 
+import java.io.IOException;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
 import org.cacert.gigi.database.DatabaseConnection;
+import org.cacert.gigi.email.EmailProvider;
+import org.cacert.gigi.util.RandomToken;
+import org.cacert.gigi.util.ServerConstants;
 
 public class EmailAddress {
-       String address;
-       int id;
-       User owner;
-       String hash = null;
+       private String address;
+       private int id;
+       private User owner;
+       private String hash = null;
 
        private EmailAddress(int id) throws SQLException {
                PreparedStatement ps = DatabaseConnection.getInstance().prepare(
@@ -28,6 +32,49 @@ public class EmailAddress {
                rs.close();
        }
 
+       public EmailAddress(String address, User owner) {
+               if (!EmailProvider.MAIL.matcher(address).matches()) {
+                       throw new IllegalArgumentException("Invalid email.");
+               }
+               this.address = address;
+               this.owner = owner;
+               this.hash = RandomToken.generateToken(16);
+       }
+
+       public void insert(Language l) {
+               if (id != 0) {
+                       throw new IllegalStateException("already inserted.");
+               }
+               try {
+                       PreparedStatement ps = DatabaseConnection.getInstance().prepare(
+                               "INSERT INTO `email` SET memid=?, hash=?, email=?");
+                       ps.setInt(1, owner.getId());
+                       ps.setString(2, hash);
+                       ps.setString(3, address);
+                       ps.execute();
+                       id = DatabaseConnection.lastInsertId(ps);
+                       StringBuffer body = new StringBuffer();
+                       body.append(l
+                               .getTranslation("Thanks for signing up with CAcert.org, below is the link you need to open to verify your account. Once your account is verified you will be able to start issuing certificates till your hearts' content!"));
+                       body.append("\n\nhttps://");
+                       body.append(ServerConstants.getWwwHostNamePort());
+                       body.append("/verify?type=email&id=");
+                       body.append(id);
+                       body.append("&hash=");
+                       body.append(hash);
+                       body.append("\n\n");
+                       body.append(l.getTranslation("Best regards"));
+                       body.append("\n");
+                       body.append(l.getTranslation("CAcert.org Support!"));
+                       EmailProvider.getInstance().sendmail(address, "[CAcert.org] " + l.getTranslation("Mail Probe"),
+                               body.toString(), "support@cacert.org", null, null, null, null, false);
+               } catch (SQLException e) {
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+       }
+
        public int getId() {
                return id;
        }
@@ -52,6 +99,7 @@ public class EmailAddress {
                                ps2.setInt(1, owner.getId());
                                ps2.setString(2, address);
                                ps2.execute();
+                               this.hash = "";
                        } catch (SQLException e) {
                                throw new GigiApiException(e);
                        }
@@ -70,4 +118,8 @@ public class EmailAddress {
                        throw new IllegalArgumentException(e);
                }
        }
+
+       public boolean isVerified() {
+               return hash.isEmpty();
+       }
 }