|
From: <tre...@us...> - 2008-01-01 22:54:07
|
Revision: 661
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=661&view=rev
Author: trevorolio
Date: 2008-01-01 14:54:12 -0800 (Tue, 01 Jan 2008)
Log Message:
-----------
Added email update to the account resource, which now triggers a validation email, creates a pending validation record, and sets the emailValid field to false on the account record.
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java 2008-01-01 21:35:01 UTC (rev 660)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/AccountPersistTasks.java 2008-01-01 22:54:12 UTC (rev 661)
@@ -184,6 +184,28 @@
return (AccountRecord) task.execute();
}
+ public static PendingEmailValidationRecord updateAccountEmail(final AccountRecord account, final String newEmail, SessionFactory sessionFactory) throws PersistException {
+ if(account.getEmail().equals(newEmail)){
+ return null;
+ }
+ final String cleanedEmail = AccountRecord.cleanEmail(newEmail);
+ if(cleanedEmail == null){
+ return null;
+ }
+ HibernateTask task = new HibernateTask() {
+ public Object run(Session hibernateSession) {
+ PendingEmailValidationRecord validationRec = new PendingEmailValidationRecord(account.getUsername(), cleanedEmail);
+ hibernateSession.save(validationRec);
+ account.setEmail(cleanedEmail);
+ account.setEmailValid(false);
+ hibernateSession.update(account);
+ return validationRec;
+ }
+ };
+ task.setSessionFactory(sessionFactory);
+ return (PendingEmailValidationRecord) task.execute();
+ }
+
public static AccountRecord findAccountByUsername(String username, SessionFactory sessionFactory) throws PersistException {
final String cleanedUsername = AccountRecord.cleanUsername(username);
if (cleanedUsername == null) {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2008-01-01 21:35:01 UTC (rev 660)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2008-01-01 22:54:12 UTC (rev 661)
@@ -73,7 +73,7 @@
public static final String SECRET_PARAMETER = "secret";
public String defaultAccountPhotoPath = null;
-
+
public static URI getAccountURI(AccountRecord accountRecord, URI baseURI) {
try {
return new URI(baseURI.toString() + "account/" + accountRecord.getUsername());
@@ -481,7 +481,7 @@
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
- if(authedAccount == null || !authedAccount.getUsername().equals(requestedUsername)){
+ if (authedAccount == null || !authedAccount.getUsername().equals(requestedUsername)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
@@ -519,7 +519,7 @@
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
- if(authedAccount == null || !authedAccount.getUsername().equals(requestedUsername)){
+ if (authedAccount == null || !authedAccount.getUsername().equals(requestedUsername)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
@@ -609,17 +609,30 @@
}
}
+ //Email changes are special, as they involve validation messages
+ if (updatedDocument.getEmail() != null && !updatedDocument.getEmail().equals(requestedAccount.getEmail())) {
+ try {
+ PendingEmailValidationRecord pendingRecord = AccountPersistTasks.updateAccountEmail(requestedAccount, updatedDocument.getEmail(), getSessionFactory());
+ if (pendingRecord == null) {
+ Log.error("Could not update account email: " + requestedAccount.getUsername() + ": " + updatedDocument.getEmail());
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ sendValidationMail(pendingRecord);
+ requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
+ sendStringResponse(createAccountDocument(requestedAccount, true).toString(), "text/xml", response);
+ return;
+ } catch (MailSendException e) {
+ Log.error("Could not send email validation message: " + e);
+ }
+ }
+
//TODO if this returns false we really should reflect that in the response
-
if (!AccountPersistTasks.update(requestedAccount, updatedDocument, getSessionFactory())) {
Log.warn("Account update failed:" + requestedAccount.getUsername());
}
- AccountDocument result = createAccountDocument(requestedAccount, true);
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType("text/xml");
- response.getOutputStream().write(result.toString().getBytes());
- return;
+ sendStringResponse(createAccountDocument(requestedAccount, true).toString(), "text/xml", response);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|