diff options
| author | Simon Rettberg | 2015-09-16 13:47:28 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-09-16 13:47:28 +0200 |
| commit | 6734c5fdc364c4cb7aa6ce9cd10443a3be32a1bc (patch) | |
| tree | 707f2bf06b88d575b8df6d95c48d2bf70c58f890 /dozentenmodulserver/src/main/java | |
| parent | [client] Clean up satellite selection window (diff) | |
| download | tutor-module-6734c5fdc364c4cb7aa6ce9cd10443a3be32a1bc.tar.gz tutor-module-6734c5fdc364c4cb7aa6ce9cd10443a3be32a1bc.tar.xz tutor-module-6734c5fdc364c4cb7aa6ce9cd10443a3be32a1bc.zip | |
[server] Refresh organization list of a user with an unknown organization connects
Diffstat (limited to 'dozentenmodulserver/src/main/java')
4 files changed, 21 insertions, 3 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java index 303b8e15..85774dde 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java @@ -125,7 +125,7 @@ public class DbUser { + " VALUES" + " (:userid, :firstname, :lastname, :email, :organizationid, UNIX_TIMESTAMP(), 1, 0)" + " ON DUPLICATE KEY UPDATE lastlogin = UNIX_TIMESTAMP(), email = VALUES(email)," - + " firstname = VALUES(firstname), lastname = VALUES(lastname)"); + + " firstname = VALUES(firstname), lastname = VALUES(lastname), organizationid = VALUES(organizationid)"); stmt.setString("userid", ui.userId); stmt.setString("firstname", ui.firstName); stmt.setString("lastname", ui.lastName); diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/permissions/User.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/permissions/User.java index ba887433..b712c065 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/permissions/User.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/permissions/User.java @@ -7,6 +7,7 @@ import org.openslx.bwlp.sat.database.mappers.DbLecture; import org.openslx.bwlp.sat.database.mappers.DbOrganization; import org.openslx.bwlp.sat.database.models.LocalOrganization; import org.openslx.bwlp.sat.database.models.LocalUser; +import org.openslx.bwlp.sat.thrift.cache.OrganizationList; import org.openslx.bwlp.sat.util.Sanitizer; import org.openslx.bwlp.thrift.iface.AuthorizationError; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; @@ -22,6 +23,7 @@ import org.openslx.bwlp.thrift.iface.TAuthorizationException; import org.openslx.bwlp.thrift.iface.TInvocationException; import org.openslx.bwlp.thrift.iface.TNotFoundException; import org.openslx.bwlp.thrift.iface.UserInfo; +import org.openslx.util.Util; public class User { @@ -63,7 +65,12 @@ public class User { return null; // User locally known, use user-specific permission return AuthorizationError.ACCOUNT_SUSPENDED; } + // User not locally known - refresh organization cache first LocalOrganization local = LocalData.getLocalOrganization(user.organizationId); + if (local == null && OrganizationList.find(user.organizationId) != null) { + Util.sleep(1000); // Since writing to DB is async.. (yeah I know) + local = LocalData.getLocalOrganization(user.organizationId); + } // User unknown, check per-organization login permission if (local == null) return AuthorizationError.INVALID_ORGANIZATION; diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/SessionManager.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/SessionManager.java index f9175e98..ddaa729a 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/SessionManager.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/SessionManager.java @@ -147,7 +147,7 @@ public class SessionManager { try { ui = ThriftManager.getMasterClient().getUserFromToken(token); } catch (TInvalidTokenException ite) { - LOGGER.warn("Invalid token: " + token, ite); + LOGGER.warn("Master says: Invalid token: " + token); throw new TAuthorizationException(AuthorizationError.INVALID_TOKEN, "Your token is not known to the master server"); } catch (Exception e) { diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/cache/OrganizationList.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/cache/OrganizationList.java index 6d2ebda2..3f144f15 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/cache/OrganizationList.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/cache/OrganizationList.java @@ -17,7 +17,7 @@ import org.openslx.util.QuickTimer.Task; * the master server. */ public class OrganizationList extends CacheBase<List<Organization>> { - + private static final Logger LOGGER = Logger.getLogger(OrganizationList.class); private static final OrganizationList instance = new OrganizationList(); @@ -54,4 +54,15 @@ public class OrganizationList extends CacheBase<List<Organization>> { return organizations; } + public static Organization find(String organizationId) { + List<Organization> list = get(); + if (list == null) + return null; + for (Organization org : list) { + if (org != null && organizationId.equals(org.organizationId)) + return org; + } + return null; + } + } |
