diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2014-04-08 23:04:40 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2014-04-08 23:04:40 -0700 |
commit | 2ac76c7937ff462f99c5713ab99c6230a11cbcf5 (patch) | |
tree | d90fcd86c8a030fdf78f7c67d88120047e8b111b | |
parent | dcb9d839c9a30adc833af51e5c0f5a0df8175ce2 (diff) |
Fixing 500 on New Account Login Bug.
AccountRedirectResource was expecting the user to have a UserRecord, but
new users did not have one. This caused JsonRequestProvider to throw an
IOException and AccountRedirectResource to return 500.
JsonRequestProvider now throws a NotFoundException on 404 and
AccountRedirectResource properly handles it.
3 files changed, 33 insertions, 2 deletions
diff --git a/src/com/p4square/grow/frontend/AccountRedirectResource.java b/src/com/p4square/grow/frontend/AccountRedirectResource.java index 0bb40a2..90a02f5 100644 --- a/src/com/p4square/grow/frontend/AccountRedirectResource.java +++ b/src/com/p4square/grow/frontend/AccountRedirectResource.java @@ -4,6 +4,7 @@ package com.p4square.grow.frontend; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -61,9 +62,22 @@ public class AccountRedirectResource extends ServerResource { */ @Override protected Representation get() { + if (mUserId == null || mUserId.length() == 0) { + // This shouldn't happen, but I want to be safe because of the DB insert below. + setStatus(Status.CLIENT_ERROR_FORBIDDEN); + return new ErrorPage("Not Authenticated!"); + } + try { // Fetch account Map. - UserRecord user = mUserRecordProvider.get(mUserId); + UserRecord user = null; + try { + user = mUserRecordProvider.get(mUserId); + } catch (NotFoundException e) { + // User record doesn't exist, so create a new one. + user = new UserRecord(getRequest().getClientInfo().getUser()); + mUserRecordProvider.put(mUserId, user); + } // Check for the new believers cookie String cookie = getRequest().getCookies().getFirstValue(NewBelieverResource.COOKIE_NAME); diff --git a/src/com/p4square/grow/frontend/JsonRequestProvider.java b/src/com/p4square/grow/frontend/JsonRequestProvider.java index a04294d..bf3b2b3 100644 --- a/src/com/p4square/grow/frontend/JsonRequestProvider.java +++ b/src/com/p4square/grow/frontend/JsonRequestProvider.java @@ -51,7 +51,11 @@ public class JsonRequestProvider<V> extends JsonEncodedProvider<V> implements Pr representation.release(); } - throw new IOException("Could not get object. " + response.getStatus()); + if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) { + throw new NotFoundException("Could not get object. " + response.getStatus()); + } else { + throw new IOException("Could not get object. " + response.getStatus()); + } } return decode(representation.getText()); diff --git a/src/com/p4square/grow/frontend/NotFoundException.java b/src/com/p4square/grow/frontend/NotFoundException.java new file mode 100644 index 0000000..dfa2a4c --- /dev/null +++ b/src/com/p4square/grow/frontend/NotFoundException.java @@ -0,0 +1,13 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.frontend; + +import java.io.IOException; + +public class NotFoundException extends IOException { + public NotFoundException(final String message) { + super(message); + } +} |