diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java index 0b1ff5c70503cc0c3206d786259bfcec3432b59f..85f378799c4abe795946e37ba98270eb6d4e31b1 100644 --- a/src/main/java/org/hbp/mip/MIPApplication.java +++ b/src/main/java/org/hbp/mip/MIPApplication.java @@ -20,6 +20,8 @@ */ package org.hbp.mip; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.hbp.mip.model.*; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; @@ -60,6 +62,8 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.security.Principal; import java.util.Date; import java.util.List; @@ -74,7 +78,19 @@ public class MIPApplication extends WebSecurityConfigurerAdapter { @RequestMapping("/user") @ResponseBody - public Principal user(Principal principal) { + public Principal user(Principal principal, HttpServletResponse response) { + ObjectMapper mapper = new ObjectMapper(); + + try { + String userJSON = mapper.writeValueAsString(getUser(principal)); + Cookie cookie = new Cookie("user", URLEncoder.encode(userJSON,"UTF-8")); + cookie.setPath("/"); + response.addCookie(cookie); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } return principal; } diff --git a/src/main/java/org/hbp/mip/model/User.java b/src/main/java/org/hbp/mip/model/User.java index 6ee077d2017774cd4e5f46e2adfafe90006521c1..c0f743bce39884985ed2eb17e851758471bb10dd 100644 --- a/src/main/java/org/hbp/mip/model/User.java +++ b/src/main/java/org/hbp/mip/model/User.java @@ -96,6 +96,11 @@ public class User { } } + if(this.picture == null || this.picture.isEmpty()) + { + this.picture = "images/users/default_user.png"; + } + } public Long getId() { diff --git a/src/main/resources/static/frontend/app/images/users/default_user.png b/src/main/resources/static/frontend/app/images/users/default_user.png new file mode 100644 index 0000000000000000000000000000000000000000..f90088857ea7c5cd34bbf3a07e9b166deb4026ad Binary files /dev/null and b/src/main/resources/static/frontend/app/images/users/default_user.png differ diff --git a/src/main/resources/static/frontend/app/scripts/app/header/header.html b/src/main/resources/static/frontend/app/scripts/app/header/header.html index dd6cacc155a4d513f4df3af3205c9e6db18918ce..0b296f8748e6e42372f8fb85ace47d71b06b73e6 100644 --- a/src/main/resources/static/frontend/app/scripts/app/header/header.html +++ b/src/main/resources/static/frontend/app/scripts/app/header/header.html @@ -1,64 +1,64 @@ -<div class="container-fluid"> - <div class="logo-area"> - - <a class="navbar-brand" href="#/home">Human Brain Project</a> - - <div class="toolbar-icon-bg hidden-xs" id="toolbar-search"> - <div class="input-group"> - <span class="input-group-btn"><button class="btn" type="button"><i class="ti ti-search"></i></button></span> - <input type="text" class="form-control" placeholder="{{ 'header.menu.search' | translate }}" size="25"> - </div> - </div> - <span id="trigger-sidebar" class="toolbar-trigger toolbar-icon-bg" ng-click="toggleLeftBar()" ng-show="!getLayoutOption('layoutHorizontal')"> - <a data-toggle="tooltips" data-placement="right" title="{{'header.menu.my-data' | translate}}" href="#/data/mydata"> - <span class="icon-bg"> - <i class="ti ti-menu"></i> - </span> - </a> - </span> - <span class="toolbar-trigger toolbar-icon-bg" > - <a href="#/data/communitydata" title="{{'header.menu.my-community' | translate}}"> - <span class="icon-bg"> - <i class="ti ti-world"></i> - </span> - </a> - </span> - </div> - <!-- logo-area --> - - <ul class="nav navbar-nav toolbar pull-right"> - <li class="toolbar-icon-bg hidden-xs disabled"> - <a href="" title="{{'header.menu.ee' | translate}}"><span class="icon-bg"><i>{{'header.menu.ee' | translate}}</i></span></a> - </li> - - <li class="toolbar-icon-bg hidden-xs"> - <a href="#/models" title="{{'header.menu.ia' | translate}}"><span class="icon-bg"><i>{{'header.menu.ia' | translate}}</i></span></a> - </li> - - <li class="toolbar-icon-bg hidden-xs disabled"> - <a href="" title="{{'header.menu.bsd' | translate}}"><span class="icon-bg"><i>{{'header.menu.bsd' | translate}}</i></span></a> - </li> - - <li class="dropdown toolbar-icon-bg"> - <a href="#" class="dropdown-toggle username" data-toggle="dropdown" data-position="right"> - <img class="img-circle" ng-src="{{user.picture}}" alt="{{user.fullname}}"/> - </a> - <ul class="dropdown-menu userinfo arrow"> - <li><a href="#/profile"><i class="ti ti-user"></i><span>{{'header.menu.profile' | translate}}</span></a></li> - <li class="disabled"><a href=""><i class="ti ti-settings"></i><span>{{'header.menu.settings' | translate}}</span></a> - </li> - <li class="divider"></li> - <li><a href="" ng-click="logout()"><i class="ti ti-shift-right"></i><span>{{'header.menu.signout' | translate}}</span></a></li> - </ul> - </li> - <li class="toolbar-trigger toolbar-icon-bg"> - <a href="#/hbpapps" title="{{'header.menu.app' | translate}}"> - <span class="icon-bg"> - <i class="ti ti-layout-grid3-alt " style="font-family: 'themify';font-weight: normal;"></i> - </span> - </a> - </li> - </ul> - -</div> - +<div class="container-fluid"> + <div class="logo-area"> + + <a class="navbar-brand" href="#/home">Human Brain Project</a> + + <div class="toolbar-icon-bg hidden-xs" id="toolbar-search"> + <div class="input-group"> + <span class="input-group-btn"><button class="btn" type="button"><i class="ti ti-search"></i></button></span> + <input type="text" class="form-control" placeholder="{{ 'header.menu.search' | translate }}" size="25"> + </div> + </div> + <span id="trigger-sidebar" class="toolbar-trigger toolbar-icon-bg" ng-click="toggleLeftBar()" ng-show="!getLayoutOption('layoutHorizontal')"> + <a data-toggle="tooltips" data-placement="right" title="{{'header.menu.my-data' | translate}}" href="#/data/mydata"> + <span class="icon-bg"> + <i class="ti ti-menu"></i> + </span> + </a> + </span> + <span class="toolbar-trigger toolbar-icon-bg" > + <a href="#/data/communitydata" title="{{'header.menu.my-community' | translate}}"> + <span class="icon-bg"> + <i class="ti ti-world"></i> + </span> + </a> + </span> + </div> + <!-- logo-area --> + + <ul class="nav navbar-nav toolbar pull-right"> + <li class="toolbar-icon-bg hidden-xs disabled"> + <a href="" title="{{'header.menu.ee' | translate}}"><span class="icon-bg"><i>{{'header.menu.ee' | translate}}</i></span></a> + </li> + + <li class="toolbar-icon-bg hidden-xs"> + <a href="#/models" title="{{'header.menu.ia' | translate}}"><span class="icon-bg"><i>{{'header.menu.ia' | translate}}</i></span></a> + </li> + + <li class="toolbar-icon-bg hidden-xs disabled"> + <a href="" title="{{'header.menu.bsd' | translate}}"><span class="icon-bg"><i>{{'header.menu.bsd' | translate}}</i></span></a> + </li> + + <li class="dropdown toolbar-icon-bg"> + <a href="#" class="dropdown-toggle username" data-toggle="dropdown" data-position="right"> + <img class="img-circle" ng-src="{{user.picture}}" alt="{{user.fullname}}"/> + </a> + <ul class="dropdown-menu userinfo arrow"> + <li><a href="#/profile"><i class="ti ti-user"></i><span>{{'header.menu.profile' | translate}}</span></a></li> + <li class="disabled"><a href=""><i class="ti ti-settings"></i><span>{{'header.menu.settings' | translate}}</span></a> + </li> + <li class="divider"></li> + <li><a href="" ng-click="logout()"><i class="ti ti-shift-right"></i><span>{{'header.menu.signout' | translate}}</span></a></li> + </ul> + </li> + <li class="toolbar-trigger toolbar-icon-bg"> + <a href="#/hbpapps" title="{{'header.menu.app' | translate}}"> + <span class="icon-bg"> + <i class="ti ti-layout-grid3-alt " style="font-family: 'themify';font-weight: normal;"></i> + </span> + </a> + </li> + </ul> + +</div> + diff --git a/src/main/resources/static/frontend/app/scripts/app/login/login.html b/src/main/resources/static/frontend/app/scripts/app/login/login.html index 49be41e44df1b94bd7dcd1061d41ee27d77222f2..c89289efa6ccbdef222e62c1dc425c75e75fe795 100644 --- a/src/main/resources/static/frontend/app/scripts/app/login/login.html +++ b/src/main/resources/static/frontend/app/scripts/app/login/login.html @@ -1,25 +1,25 @@ -<div class="container login-form"> - <a href="#" class="login-logo"><img masked-image src="images/logo-big.png"></a> - <div class="row"> - <div class="col-md-12"> - <div class="block-header block-login"> - <h3> </h3> - <h2>Login to HBP</h2> - - <button type="button" onclick="location.href='http://155.105.202.58:8080/login/hbp';" class="btn-round"> - <span> - <span>{{'login.title' | translate }}</span> - <i class="ti ti-arrow-down"></i> - </span> - </button> - - <a href="" class="forgot-pass">{{'login.forgot-password' | translate }}</a> - </form> - <ul> - <li>the human brain</li> - <li>project</li> - </ul> - </div> - </div> - </div> -</div> +<div class="container login-form"> + <a href="#" class="login-logo"><img masked-image src="images/logo-big.png"></a> + <div class="row"> + <div class="col-md-12"> + <div class="block-header block-login"> + <h3> </h3> + <h2>Login to HBP</h2> + + <button type="button" onclick="location.href='http://155.105.202.58:8080/login/hbp';" class="btn-round"> + <span> + <span>{{'login.title' | translate }}</span> + <i class="ti ti-arrow-down"></i> + </span> + </button> + + <a href="" class="forgot-pass">{{'login.forgot-password' | translate }}</a> + </form> + <ul> + <li>the human brain</li> + <li>project</li> + </ul> + </div> + </div> + </div> +</div> diff --git a/src/main/resources/static/frontend/app/scripts/app/users/users.service.js b/src/main/resources/static/frontend/app/scripts/app/users/users.service.js index 24f786e647b871b0f0198f3c3e060ff68e338557..0dfcf039d7e334bcffc8dab470d789c1dca14074 100644 --- a/src/main/resources/static/frontend/app/scripts/app/users/users.service.js +++ b/src/main/resources/static/frontend/app/scripts/app/users/users.service.js @@ -1,80 +1,80 @@ -/** - * Created by Florent PERINEL on 14/08/2015. - */ -'use strict'; - -angular.module('chuvApp.users') - .factory('User', ['$rootScope','backendUrl','$http','$cookieStore','base64', function ($rootScope,backendUrl,$http,$cookieStore,base64) { - - var datas = [ - { id: 1, login: "admin", password: "kitten", firstname: "Bogdan", lastname: "DRAGANSKI", fullname: "Bogdan DRAGANSKI", team: "Scientist", - picture: "images/users/Bogdan.jpg", web:"http://www.hbpproject.eu", email: "admin@hbpproject.eu", phone:"+33 6 00 00 00 00", birthday: "1982-01-22", gender:"Male", - languages:["French"], city:"Lausanne", country:"Switzerland" }, - - { id: 2, login: "l.dib", password: "user", firstname: "Linda", lastname: "DIB", fullname: "Linda DIB", team: "Scientist", - picture: "images/users/Linda.png", web:"http://www.hbpproject.eu", - email: "a.kiliaan@hbpproject.eu", phone:"+33 6 00 00 00 00", birthday: "1983-05-02", gender:"Female", - languages:["French","Netherlands"], city:"Nijmegen", country:"Netherlands" }, - - { id: 3, login: "llaursen", password: "poc", firstname: "Lucas", lastname: "LAURSEN", fullname: "Lucas LAURSEN", team: "Press", - picture: "images/users/llaursen.jpg", web:"http://www.hbpproject.eu", email: "llaursen@hbpproject.eu", phone:"06 00 00 00 00", birthday: "1982-05-10", gender:"Male", - languages:["French","Spanish"], city:"Madric", country:"Spain" } - ]; - - var currentUser = datas[0]; - - return { - - current: function () { - return $cookieStore.get('user'); - }, - hasCurrent : function(){ - return $cookieStore.get('user') !== null && $cookieStore.get('user') !== undefined; - }, - removeCurrent: function () { - return $cookieStore.remove('user'); - }, - - authenticate: function (login, password) { - currentUser = {username:login,password:password}; - var cString = login + ':' + password; - return $http.post(backendUrl+"/authenticate",currentUser,{ - headers:{ - 'Authorization':'Basic ' + base64.encode(cString) - } - }).success(function (response) { - $cookieStore.put('user',response); - return response; - } - ); - }, - - get: function (id) { - for (var idx in datas) { - if (datas.hasOwnProperty(idx) && datas[idx].id == id) { - return datas[idx]; - } - } - return null; - }, - - create: function (user) { - return user - }, - - update: function (user) { - return user - }, - - remove: function (id) { - for (var idx in datas) { - if (datas.hasOwnProperty(idx) && datas[idx].id == id) { - datas.splice(idx, 1); - return; - } - } - } - - }; - - }]); +/** + * Created by Florent PERINEL on 14/08/2015. + */ +'use strict'; + +angular.module('chuvApp.users') + .factory('User', ['$rootScope','backendUrl','$http','$cookieStore','base64', function ($rootScope,backendUrl,$http,$cookieStore,base64) { + + var datas = [ + { id: 1, login: "admin", password: "kitten", firstname: "Bogdan", lastname: "DRAGANSKI", fullname: "Bogdan DRAGANSKI", team: "Scientist", + picture: "images/users/Bogdan.jpg", web:"http://www.hbpproject.eu", email: "admin@hbpproject.eu", phone:"+33 6 00 00 00 00", birthday: "1982-01-22", gender:"Male", + languages:["French"], city:"Lausanne", country:"Switzerland" }, + + { id: 2, login: "l.dib", password: "user", firstname: "Linda", lastname: "DIB", fullname: "Linda DIB", team: "Scientist", + picture: "images/users/Linda.png", web:"http://www.hbpproject.eu", + email: "a.kiliaan@hbpproject.eu", phone:"+33 6 00 00 00 00", birthday: "1983-05-02", gender:"Female", + languages:["French","Netherlands"], city:"Nijmegen", country:"Netherlands" }, + + { id: 3, login: "llaursen", password: "poc", firstname: "Lucas", lastname: "LAURSEN", fullname: "Lucas LAURSEN", team: "Press", + picture: "images/users/llaursen.jpg", web:"http://www.hbpproject.eu", email: "llaursen@hbpproject.eu", phone:"06 00 00 00 00", birthday: "1982-05-10", gender:"Male", + languages:["French","Spanish"], city:"Madric", country:"Spain" } + ]; + + var currentUser = datas[0]; + + return { + + current: function () { + return $cookieStore.get('user'); + }, + hasCurrent : function(){ + return $cookieStore.get('user') !== null && $cookieStore.get('user') !== undefined; + }, + removeCurrent: function () { + return $cookieStore.remove('user'); + }, + + authenticate: function (login, password) { + currentUser = {username:login,password:password}; + var cString = login + ':' + password; + return $http.post(backendUrl+"/authenticate",currentUser,{ + headers:{ + 'Authorization':'Basic ' + base64.encode(cString) + } + }).success(function (response) { + $cookieStore.put('user',response); + return response; + } + ); + }, + + get: function (id) { + for (var idx in datas) { + if (datas.hasOwnProperty(idx) && datas[idx].id == id) { + return datas[idx]; + } + } + return null; + }, + + create: function (user) { + return user + }, + + update: function (user) { + return user + }, + + remove: function (id) { + for (var idx in datas) { + if (datas.hasOwnProperty(idx) && datas[idx].id == id) { + datas.splice(idx, 1); + return; + } + } + } + + }; + + }]);