summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-16 13:47:28 +0200
committerSimon Rettberg2015-09-16 13:47:28 +0200
commit6734c5fdc364c4cb7aa6ce9cd10443a3be32a1bc (patch)
tree707f2bf06b88d575b8df6d95c48d2bf70c58f890 /dozentenmodulserver/src/main/java
parent[client] Clean up satellite selection window (diff)
downloadtutor-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')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/permissions/User.java7
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/SessionManager.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/cache/OrganizationList.java13
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;
+ }
+
}