From 846e85a8c1f3fc7e8408d223a082e1ff0f6b5f1e Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Thu, 3 Mar 2016 11:44:40 +0100
Subject: [PATCH] use new user-endpoint + fixed indentation + fixed bug 500 on
 get /user

---
 config/application.yml                        |  2 +-
 src/main/java/org/hbp/mip/MIPApplication.java | 30 ++++++++++++-------
 .../org/hbp/mip/controllers/ArticlesApi.java  | 12 +++++---
 .../org/hbp/mip/controllers/DatasetsApi.java  |  3 +-
 .../org/hbp/mip/controllers/GroupsApi.java    |  3 +-
 .../org/hbp/mip/controllers/ModelsApi.java    |  9 ++++--
 src/main/java/org/hbp/mip/model/User.java     | 15 +++++-----
 .../resources/spring/application-context.xml  |  2 +-
 8 files changed, 48 insertions(+), 28 deletions(-)

diff --git a/config/application.yml b/config/application.yml
index c70467fcc..da656fbf3 100644
--- a/config/application.yml
+++ b/config/application.yml
@@ -20,7 +20,7 @@ hbp:
     # use-current-uri: false  # For production server
     # pre-established-redirect-uri: https://mip.humanbrainproject.eu/services/login/hbp  # For production server
   resource:
-    userInfoUri: https://services.humanbrainproject.eu/oidc/v0/api/user/me
+    userInfoUri: https://services.humanbrainproject.eu/oidc/userinfo
 
 logging:
   level:
diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java
index 5c2e951fa..4c4d911fb 100644
--- a/src/main/java/org/hbp/mip/MIPApplication.java
+++ b/src/main/java/org/hbp/mip/MIPApplication.java
@@ -126,16 +126,26 @@ public static void main(String[] args) {
      */
      public synchronized User getUser(Principal principal) {
          Session session = HibernateUtil.getSessionFactory().getCurrentSession();
-         session.beginTransaction();
-         User user = (User) session
-            .createQuery("from User where username= :username")
-            .setString("username", principal.getName())
-            .uniqueResult();
-         if (user == null) {
-            user = new User(getUserInfos());
-            session.save(user);
-        }
-         session.getTransaction().commit();
+         User user = null;
+         try {
+             session.beginTransaction();
+             user = (User) session
+                     .createQuery("from User where username= :username")
+                     .setString("username", principal.getName())
+                     .uniqueResult();
+             if (user == null) {
+                 user = new User(getUserInfos());
+                 session.save(user);
+             }
+             session.getTransaction().commit();
+         } catch (Exception e)
+         {
+             if(session.getTransaction() != null)
+             {
+                 session.getTransaction().rollback();
+             }
+         }
+
         return user;
     }
 
diff --git a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
index cbfddbb67..e280d1732 100644
--- a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
@@ -93,7 +93,8 @@ public class ArticlesApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<List<Article>>(HttpStatus.OK).ok(articles);
     }
@@ -129,7 +130,8 @@ public class ArticlesApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Void>(HttpStatus.OK);
     }
@@ -156,7 +158,8 @@ public class ArticlesApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Article>(HttpStatus.OK).ok(article);
     }
@@ -185,7 +188,8 @@ public class ArticlesApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Void>(HttpStatus.OK);
     }
diff --git a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
index 1d03600cf..9a70a4829 100644
--- a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
@@ -45,7 +45,8 @@ public class DatasetsApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Dataset>(HttpStatus.OK).ok(dataset);
     }
diff --git a/src/main/java/org/hbp/mip/controllers/GroupsApi.java b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
index 59681d143..11e2f8171 100644
--- a/src/main/java/org/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
@@ -43,7 +43,8 @@ public class GroupsApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Group>(HttpStatus.OK).ok(group);
     }
diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
index 0bbe660d1..2d9c99dd8 100644
--- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
@@ -127,7 +127,8 @@ public class ModelsApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Model>(HttpStatus.OK).ok(model);
     }
@@ -203,7 +204,8 @@ public class ModelsApi {
                 if(session.getTransaction() != null)
                 {
                     session.getTransaction().rollback();
-                }            }
+                }
+            }
         }
 
         return new ResponseEntity<Model>(HttpStatus.OK).ok(model);
@@ -233,7 +235,8 @@ public class ModelsApi {
             if(session.getTransaction() != null)
             {
                 session.getTransaction().rollback();
-            }        }
+            }
+        }
 
         return new ResponseEntity<Void>(HttpStatus.OK);
     }
diff --git a/src/main/java/org/hbp/mip/model/User.java b/src/main/java/org/hbp/mip/model/User.java
index e2f549d04..93cf4f981 100644
--- a/src/main/java/org/hbp/mip/model/User.java
+++ b/src/main/java/org/hbp/mip/model/User.java
@@ -47,34 +47,35 @@ public class User {
     }
 
     public User(String userInfo) {
+
         Pattern p;
         Matcher m;
 
-        p = Pattern.compile("username=([\\w ]+)");
+        p = Pattern.compile("preferred_username=([\\w ]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
             this.username = m.group(1);
         }
 
-        p = Pattern.compile("displayName=([\\w ]+)");
+        p = Pattern.compile("name=([\\w ]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
             this.fullname = m.group(1);
         }
 
-        p = Pattern.compile("givenName=([\\w ]+)");
+        p = Pattern.compile("given_name=([\\w ]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
             this.firstname = m.group(1);
         }
 
-        p = Pattern.compile("familyName=([\\w ]+)");
+        p = Pattern.compile("family_name=([\\w ]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
             this.lastname = m.group(1);
         }
 
-        p = Pattern.compile("value=([\\w.]+@[\\w.]+)");
+        p = Pattern.compile("email=([\\w.]+@[\\w.]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
             this.email = m.group(1);
@@ -96,10 +97,10 @@ public class User {
             this.team = m.group(1);
         }
 
-        p = Pattern.compile("subprojects=([A-Za-z0-9\\[\\] ]+)");
+        p = Pattern.compile("picture=([\\w.:/ ]+)");
         m = p.matcher(userInfo);
         if (m.find()) {
-            this.team += m.group(1);
+            this.picture = m.group(1);
         }
 
         if (this.picture == null || this.picture.isEmpty()) {
diff --git a/src/main/resources/spring/application-context.xml b/src/main/resources/spring/application-context.xml
index 7eef8445f..9d283991f 100644
--- a/src/main/resources/spring/application-context.xml
+++ b/src/main/resources/spring/application-context.xml
@@ -27,7 +27,7 @@
 		<property name="tokenServices">
 			<bean class="org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices">
 				<constructor-arg name="clientId" value="996f97c5-a3ca-460e-b18b-00df3e2be89a" />
-				<constructor-arg name="userInfoEndpointUrl" value="https://services.humanbrainproject.eu/oidc/v0/api/user/me" />
+				<constructor-arg name="userInfoEndpointUrl" value="https://services.humanbrainproject.eu/oidc/userinfo" />
 			</bean>
 		</property>
 	</bean>
-- 
GitLab