Author: solomax
Date: Wed Aug 12 10:39:39 2015
New Revision: 1695468

URL: http://svn.apache.org/r1695468
Log:
[OPENMEETINGS-954] login via G+ is implemented

Modified:
    
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
    
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/UserManager.java
    
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/MobileService.java
    
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
    
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
    
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
    
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/trunk/singlewebapp/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
    
openmeetings/trunk/singlewebapp/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java

Modified: 
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
 Wed Aug 12 10:39:39 2015
@@ -18,11 +18,17 @@
  */
 package org.apache.openmeetings.db.dao.user;
 
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
 
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 
 //FIXME HACK to bypass cross project compilation
@@ -41,4 +47,8 @@ public interface IUserManager {
                        String street, String additionalname, String fax, 
String zip,
                        long states_id, String town, long language_id, String 
phone, boolean sendSMS, 
                        boolean generateSipUserData, String jNameTimeZone);
+       
+       Long getLanguage(Locale loc);
+       State getCountry(Locale loc);
+       User loginOAuth(Map<String, String> params, long serverId) throws 
IOException, NoSuchAlgorithmException;
 }

Modified: 
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Wed Aug 12 10:39:39 2015
@@ -34,6 +34,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
@@ -290,6 +291,7 @@ public class ImportInitvalues {
 
                cfgDao.add(CONFIG_FRONTEND_REGISTER_KEY, 
cfg.allowFrontendRegister, null, "Is user register available on login screen");
                cfgDao.add(CONFIG_SOAP_REGISTER_KEY, "1", null, "Is user 
register available via SOAP/REST");
+               cfgDao.add(CONFIG_OAUTH_REGISTER_KEY, "1", null, "Is user 
register available via OAuth");
                // this group_id is the Organisation of users who register 
through the frontend or SOAP
                cfgDao.add(CONFIG_DEFAULT_GROUP_ID, "1", null, "");
 

Modified: 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/UserManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/UserManager.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/UserManager.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/UserManager.java
 Wed Aug 12 10:39:39 2015
@@ -20,15 +20,21 @@ package org.apache.openmeetings.data.use
 
 import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
 import java.util.Set;
 import java.util.TimeZone;
 
@@ -37,6 +43,7 @@ import javax.persistence.PersistenceCont
 import javax.persistence.TypedQuery;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
@@ -49,8 +56,10 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.State;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.db.entity.user.Userdata;
 import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.apache.openmeetings.mail.MailHandler;
@@ -81,15 +90,15 @@ public class UserManager implements IUse
        @Autowired
        private SessiondataDao sessiondataDao;
        @Autowired
-       private ConfigurationDao configurationDao;
+       private ConfigurationDao cfgDao;
        @Autowired
-       private StateDao statemanagement;
+       private StateDao stateDao;
        @Autowired
        private OrganisationDao orgDao;
        @Autowired
        private OrganisationUserDao orgUserDao;
        @Autowired
-       private UserDao usersDao;
+       private UserDao userDao;
        @Autowired
        private EmailManager emailManagement;
        @Autowired
@@ -106,7 +115,7 @@ public class UserManager implements IUse
                try {
                        SearchResult<User> sresult = new SearchResult<User>();
                        sresult.setObjectName(User.class.getName());
-                       sresult.setRecords(usersDao.count(search));
+                       sresult.setRecords(userDao.count(search));
 
                        String sort = null;
                        if (orderby != null && orderby.length() > 0) {
@@ -149,7 +158,7 @@ public class UserManager implements IUse
 
                        if (sessionData != null) {
 
-                               User u = usersDao.get(sessionData.getUser_id());
+                               User u = userDao.get(sessionData.getUser_id());
 
                                sessiondataDao.updateUserWithoutSession(SID, 
u.getUser_id());
 
@@ -287,10 +296,10 @@ public class UserManager implements IUse
                        String additionalname, String fax, String zip, long 
states_id,
                        String town, long language_id, String phone, boolean 
sendSMS, boolean generateSipUserData, String jNameTimeZone) {
                
-               String baseURL = configurationDao.getBaseUrl();
+               String baseURL = cfgDao.getBaseUrl();
                boolean sendConfirmation = baseURL != null
                                && !baseURL.isEmpty()
-                               && 1 == 
configurationDao.getConfValue("sendEmailWithVerficationCode", Integer.class, 
"0");
+                               && 1 == 
cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
                
                return registerUser(login, Userpass, lastname, firstname, 
email, age,
                                street, additionalname, fax, zip, states_id, 
town, language_id,
@@ -315,14 +324,14 @@ public class UserManager implements IUse
                        boolean generateSipUserData, String jNameTimeZone, 
Boolean sendConfirmation) {
                try {
                        // Checks if FrontEndUsers can register
-                       if 
("1".equals(configurationDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, 
String.class, "0"))) {
+                       if 
("1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0"))) {
                                
                                // TODO: Read and generate SIP-Data via 
RPC-Interface Issue 1098
 
                                Long user_id = 
registerUserInit(UserDao.getDefaultRights(), login,
                                                Userpass, lastname, firstname, 
email, age, street,
                                                additionalname, fax, zip, 
states_id, town, language_id,
-                                               true, 
Arrays.asList(configurationDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, 
Long.class, null)), phone,
+                                               true, 
Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)), 
phone,
                                                sendSMS, sendConfirmation, 
timezoneUtil.getTimeZone(jNameTimeZone), false, "", "", false, true, null);
 
                                if (user_id > 0 && sendConfirmation) {
@@ -380,13 +389,13 @@ public class UserManager implements IUse
                        Boolean showContactDataToContacts, String 
activatedHash) throws Exception {
                // TODO: make phone number persistent
                // Check for required data
-               if (login.length() >= getMinLoginLength(configurationDao)) {
+               if (login.length() >= getMinLoginLength(cfgDao)) {
                        // Check for duplicates
-                       boolean checkName = usersDao.checkLogin(login, 
User.Type.user, null, null);
-                       boolean checkEmail = Strings.isEmpty(email) || 
usersDao.checkEmail(email, User.Type.user, null, null);
+                       boolean checkName = userDao.checkLogin(login, 
User.Type.user, null, null);
+                       boolean checkEmail = Strings.isEmpty(email) || 
userDao.checkEmail(email, User.Type.user, null, null);
                        if (checkName && checkEmail) {
 
-                               String link = configurationDao.getBaseUrl();
+                               String link = cfgDao.getBaseUrl();
                                String hash = activatedHash;
                                if (hash == null){
                                        hash = 
ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(login
@@ -400,7 +409,7 @@ public class UserManager implements IUse
                                        if (!sendMail.equals("success"))
                                                return -19L;
                                }
-                               Address adr =  usersDao.getAddress(street, zip, 
town, states_id, additionalname, fax, phone, email);
+                               Address adr =  userDao.getAddress(street, zip, 
town, states_id, additionalname, fax, phone, email);
 
                                // If this user needs first to click his E-Mail 
verification
                                // code then set the status to 0
@@ -412,7 +421,7 @@ public class UserManager implements IUse
                                for (Long id : organisations) {
                                        orgList.add(new 
Organisation_Users(orgDao.get(id)));
                                }
-                               User u = usersDao.addUser(rights, firstname, 
login, lastname, language_id,
+                               User u = userDao.addUser(rights, firstname, 
login, lastname, language_id,
                                                password, adr, sendSMS, age, 
hash, timezone,
                                                forceTimeZoneCheck, userOffers, 
userSearchs, showContactData,
                                                showContactDataToContacts, 
null, null, orgList, null);
@@ -453,7 +462,7 @@ public class UserManager implements IUse
                        Long users_id = sessiondataDao.checkSession(SID);
 
                        // admins only
-                       if 
(AuthLevelUtil.hasAdminLevel(usersDao.getRights(users_id))) {
+                       if 
(AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
 
                                sessiondataDao.clearSessionByRoomId(room_id);
 
@@ -475,10 +484,8 @@ public class UserManager implements IUse
                                                        rcl.getStreamid(), 
currentScope);
 
                                }
-
                                return true;
                        }
-
                } catch (Exception err) {
                        log.error("[kickUserByStreamId]", err);
                }
@@ -490,7 +497,7 @@ public class UserManager implements IUse
                        Long users_id = sessiondataDao.checkSession(SID);
 
                        // admins only
-                       if 
(AuthLevelUtil.hasWebServiceLevel(usersDao.getRights(users_id))) {
+                       if 
(AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
 
                                Client rcl = sessionManager
                                                
.getClientByPublicSID(publicSID, false, null);
@@ -515,10 +522,92 @@ public class UserManager implements IUse
 
                                return true;
                        }
-
                } catch (Exception err) {
                        log.error("[kickUserByStreamId]", err);
                }
                return null;
        }
+       
+       public Long getLanguage(Locale loc) {
+               if (loc != null) {
+                       for (Map.Entry<Long, Locale> e : 
LabelDao.languages.entrySet()) {
+                               if (loc.equals(e.getValue())) {
+                                       return e.getKey();
+                               }
+                       }
+               }
+               return cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, 
"1");
+       }
+
+       public State getCountry(Locale loc) {
+               List<State> states = stateDao.getStates();
+               if (loc != null) {
+                       String code = loc.getISO3Country().toUpperCase();
+                       for (State s : states) {
+                               if 
(s.getShortName().toUpperCase().equals(code)) {
+                                       return s;
+                               }
+                       }
+               }
+               return states.get(0);
+       }
+
+       public User loginOAuth(Map<String, String> params, long serverId) 
throws IOException, NoSuchAlgorithmException {
+               String login = params.get("login");
+               String email = params.get("email");
+               String lastname = params.get("lastname");
+               String firstname = params.get("firstname");
+               if (firstname == null) {
+                       firstname = "";
+               }
+               if (lastname == null) {
+                       lastname = "";
+               }
+               if (!userDao.validLogin(login)) {
+                       log.error("Invalid login, please check parameters");
+                       return null; //TODO FIXME need to be checked
+               }
+               User u = userDao.getByLogin(login, Type.oauth, serverId);
+               if (!userDao.checkEmail(email, Type.oauth, serverId, u == null 
? null : u.getUser_id())) {
+                       log.error("Another user with the same email exists");
+                       return null; //TODO FIXME need to be checked
+               }
+               // generate random password
+               byte[] rawPass = new byte[25];
+               Random rnd = new Random();
+               for (int i = 0; i < rawPass.length; ++i) {
+                       rawPass[i] = (byte) ('!' + rnd.nextInt(93));
+               }
+               String pass = new String(rawPass, "UTF-8");
+               // check if the user already exists and register new one if 
it's needed
+               if (u == null) {
+                       u = userDao.getNewUserInstance(null);
+                       u.setType(Type.oauth);
+                       u.getRights().remove(Right.Login);;
+                       u.setDomainId(serverId);
+                       u.getOrganisation_users().add(new 
Organisation_Users(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, 
Long.class, "-1"))));
+                       u.setLogin(login);
+                       u.setShowContactDataToContacts(true);
+                       u.setLastname(lastname);
+                       u.setFirstname(firstname);
+                       u.getAdresses().setEmail(email);
+                       String picture = params.get("picture");
+                       if (picture != null) {
+                               u.setPictureuri(picture);
+                       }
+                       String locale = params.get("locale");
+                       if (locale != null) {
+                               Locale loc = Locale.forLanguageTag(locale);
+                               if (loc != null) {
+                                       u.setLanguage_id(getLanguage(loc));
+                                       
u.getAdresses().setStates(getCountry(loc));
+                               }
+                       }
+               }
+               //TODO FIXME should we update fields on login ????
+               u.setLastlogin(new Date());
+               u = userDao.update(u, pass, -1);
+               
+               return u;
+       }
 }

Modified: 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/MobileService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/MobileService.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/MobileService.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/MobileService.java
 Wed Aug 12 10:39:39 2015
@@ -18,6 +18,9 @@
  */
 package org.apache.openmeetings.remote;
 
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.ArrayList;
@@ -27,11 +30,13 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.room.IRoomManager;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
@@ -52,8 +57,12 @@ import org.springframework.beans.factory
 public class MobileService {
        private static final Logger log = 
Red5LoggerFactory.getLogger(MainService.class, webAppRootKey);
        @Autowired
+       private ConfigurationDao cfgDao;
+       @Autowired
        private UserDao userDao;
        @Autowired
+       private IUserManager userManager;
+       @Autowired
        private SessiondataDao sessionDao;
        @Autowired
        private ISessionManager sessionManager;
@@ -70,51 +79,80 @@ public class MobileService {
                m.put(key, v == null ? "" : v);
        }
        
+       public Map<String, Object> checkServer() {
+               Map<String, Object> result = new Hashtable<>();
+               result.put("allowSelfRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, 
"0")));
+               result.put("allowSoapRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0")));
+               result.put("allowOauthRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
+               return result;
+       }
+       
+       public Map<String, Object> loginGoogle(Map<String, String> umap) {
+               Map<String, Object> result = getResult();
+               try {
+                       User u = userManager.loginOAuth(umap, 2); //TODO 
hardcoded
+                       result = login(u, result);
+               } catch (Exception e) {
+                       log.error("[loginUser]", e);
+               }
+               return result;
+       }
+       
        public Map<String, Object> loginUser(String login, String password) {
-               Map<String, Object> result = new Hashtable<String, Object>();
+               Map<String, Object> result = getResult();
                try {
-                       result.put("status", -1);
                        User u = userDao.login(login, password);
-                       if (u != null) {
-                               Sessiondata sd = sessionDao.startsession();
-                               Boolean bool = 
sessionDao.updateUser(sd.getSession_id(), u.getUser_id(), false, 
u.getLanguage_id());
-                               if (bool == null) {
-                                       // Exception
-                               } else if (!bool) {
-                                       // invalid Session-Object
-                                       result.put("status", -35);
-                               } else {
-                                       IConnection conn = 
Red5.getConnectionLocal();
-                                       String streamId = 
conn.getClient().getId();
-                                       Client c = 
sessionManager.getClientByStreamId(streamId, null);
-                                       if (c == null) {
-                                               c = 
sessionManager.addClientListItem(streamId, conn.getScope().getName(), 
conn.getRemotePort(),
-                                                       
conn.getRemoteAddress(), "", false, null);
-                                       }
-                                       
-                                       
SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
-                                       c.setUser_id(u.getUser_id());
-                                       c.setFirstname(u.getFirstname());
-                                       c.setLastname(u.getLastname());
-                                       c.setMobile(true);
-                                       
sessionManager.updateClientByStreamId(streamId, c, false, null);
-
-                                       add(result, "sid", sd.getSession_id());
-                                       add(result, "publicSid", 
c.getPublicSID());
-                                       add(result, "status", 0);
-                                       add(result, "userId", u.getUser_id());
-                                       add(result, "firstname", 
u.getFirstname());
-                                       add(result, "lastname", 
u.getLastname());
-                                       add(result, "login", u.getLogin());
-                                       add(result, "email", u.getAdresses() == 
null ? "" : u.getAdresses().getEmail());
-                                       add(result, "language", 
u.getLanguage_id()); //TODO rights
-                               }
-                       }
+                       result = login(u, result);
                } catch (Exception e) {
                        log.error("[loginUser]", e);
                }
                return result;
        }
+       
+       private Map<String, Object> getResult() {
+               Map<String, Object> result = new Hashtable<>();
+               result.put("status", -1);
+               return result;
+       }
+       
+       private Map<String, Object> login(User u, Map<String, Object> result) {
+               if (u != null) {
+                       Sessiondata sd = sessionDao.startsession();
+                       Boolean bool = 
sessionDao.updateUser(sd.getSession_id(), u.getUser_id(), false, 
u.getLanguage_id());
+                       if (bool == null) {
+                               // Exception
+                       } else if (!bool) {
+                               // invalid Session-Object
+                               result.put("status", -35);
+                       } else {
+                               IConnection conn = Red5.getConnectionLocal();
+                               String streamId = conn.getClient().getId();
+                               Client c = 
sessionManager.getClientByStreamId(streamId, null);
+                               if (c == null) {
+                                       c = 
sessionManager.addClientListItem(streamId, conn.getScope().getName(), 
conn.getRemotePort(),
+                                               conn.getRemoteAddress(), "", 
false, null);
+                               }
+                               
+                               
SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
+                               c.setUser_id(u.getUser_id());
+                               c.setFirstname(u.getFirstname());
+                               c.setLastname(u.getLastname());
+                               c.setMobile(true);
+                               sessionManager.updateClientByStreamId(streamId, 
c, false, null);
+
+                               add(result, "sid", sd.getSession_id());
+                               add(result, "publicSid", c.getPublicSID());
+                               add(result, "status", 0);
+                               add(result, "userId", u.getUser_id());
+                               add(result, "firstname", u.getFirstname());
+                               add(result, "lastname", u.getLastname());
+                               add(result, "login", u.getLogin());
+                               add(result, "email", u.getAdresses() == null ? 
"" : u.getAdresses().getEmail());
+                               add(result, "language", u.getLanguage_id()); 
//TODO rights
+                       }
+               }
+               return result;
+       }
        
        public List<Map<String, Object>> getVideoStreams() {
                List<Map<String, Object>> result = new 
ArrayList<Map<String,Object>>();

Modified: 
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 Wed Aug 12 10:39:39 2015
@@ -25,6 +25,7 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_DEFAULT_LANG_KEY = "default_lang_id";
        public static final String CONFIG_FRONTEND_REGISTER_KEY = 
"allow_frontend_register";
        public static final String CONFIG_SOAP_REGISTER_KEY = 
"allow.soap.register";
+       public static final String CONFIG_OAUTH_REGISTER_KEY = 
"allow.oauth.register";
        public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = 
"user.login.minimum.length";
        public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = 
"max_upload_size";
        public static final String CONFIG_PASS_MIN_LENGTH_KEY = 
"user.pass.minimum.length";

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
 Wed Aug 12 10:39:39 2015
@@ -41,7 +41,6 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
 
@@ -49,7 +48,7 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
 import org.apache.openmeetings.db.entity.server.SOAPLogin;
@@ -251,8 +250,6 @@ public class WebSession extends Abstract
        }
        
        public boolean signIn(String login, String password, Type type, Long 
domainId) {
-               Sessiondata sessData = 
getBean(SessiondataDao.class).startsession();
-               SID = sessData.getSession_id();
                try {
                        User u = null;
                        switch (type) {
@@ -273,7 +270,7 @@ public class WebSession extends Abstract
                        if (u == null) {
                                return false;
                        }
-                       setUser(u);
+                       signIn(u);
                        return true;
                } catch (OmException oe) {
                        loginError = oe.getCode() == null ? -1L : oe.getCode();
@@ -281,6 +278,16 @@ public class WebSession extends Abstract
                return false;
        }
        
+       public boolean signIn(User u) {
+               Sessiondata sessData = 
getBean(SessiondataDao.class).startsession();
+               SID = sessData.getSession_id();
+               if (u == null) {
+                       return false;
+               }
+               setUser(u);
+               return true;
+       }
+       
        public Long getLoginError() {
                return loginError;
        }
@@ -397,23 +404,11 @@ public class WebSession extends Abstract
        }
 
        public Long getLanguageByBrowserLocale() {
-               for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) 
{
-                       if (getBrowserLocale().equals(e.getValue())) {
-                               return e.getKey();
-                       }
-               }
-               return 
getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, 
Long.class, "1");
+               return 
getBean(IUserManager.class).getLanguage(getBrowserLocale());
        }
 
        public State getCountryByBrowserLocale() {
-               List<State> states = getBean(StateDao.class).getStates();
-               String code = getBrowserLocale().getISO3Country().toUpperCase();
-               for (State s : states) {
-                       if (s.getShortName().toUpperCase().equals(code)){
-                               return s;
-                       }
-               }
-               return states.get(0);
+               return 
getBean(IUserManager.class).getCountry(getBrowserLocale());
        }
 
        public String getClientTZCode() {

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 Wed Aug 12 10:39:39 2015
@@ -18,7 +18,6 @@
  */
 package org.apache.openmeetings.web.pages.auth;
 
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -36,10 +35,8 @@ import java.net.URLEncoder;
 import java.security.NoSuchAlgorithmException;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Random;
 
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
@@ -52,12 +49,9 @@ import javax.net.ssl.X509TrustManager;
 import org.apache.commons.io.IOUtils;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.server.OAuth2Dao;
-import org.apache.openmeetings.db.dao.user.OrganisationDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
-import org.apache.openmeetings.db.entity.user.Organisation_Users;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
@@ -339,51 +333,9 @@ public class SignInPage extends BaseInit
        }
        
        private void loginViaOAuth2(Map<String, String> params, long serverId) 
throws IOException, NoSuchAlgorithmException {
-               UserDao userDao = getBean(UserDao.class);
-               ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-               String login = params.get("login");
-               String email = params.get("email");
-               String lastname = params.get("lastname");
-               String firstname = params.get("firstname");
-               if (firstname == null) {
-                       firstname = "";
-               }
-               if (lastname == null) {
-                       lastname = "";
-               }
-               if (!userDao.validLogin(login)) {
-                       log.error("Invalid login, please check parameters");
-                       return;
-               }
-               User u = userDao.getByLogin(login, Type.oauth, serverId);
-               if (!userDao.checkEmail(email, Type.oauth, serverId, u == null 
? null : u.getUser_id())) {
-                       log.error("Another user with the same email exists");
-                       return;
-               }
-               // generate random password
-               byte[] rawPass = new byte[25];
-               Random rnd = new Random();
-               for (int i = 0; i < rawPass.length; ++i) {
-                       rawPass[i] = (byte) ('!' + rnd.nextInt(93));
-               }
-               String pass = new String(rawPass, "UTF-8");
-               // check if the user already exists and register new one if 
it's needed
-               if (u == null) {
-                       u = userDao.getNewUserInstance(null);
-                       u.setType(Type.oauth);
-                       u.getRights().remove(Right.Login);;
-                       u.setDomainId(serverId);
-                       u.getOrganisation_users().add(new 
Organisation_Users(getBean(OrganisationDao.class).get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID,
 Long.class, "-1"))));
-                       u.setLogin(login);
-                       u.setShowContactDataToContacts(true);
-                       u.setLastname(lastname);
-                       u.setFirstname(firstname);
-                       u.getAdresses().setEmail(email);
-               }
-               u.setLastlogin(new Date());
-               u = userDao.update(u, pass, -1);
+               User u = getBean(IUserManager.class).loginOAuth(params, 
serverId);
                
-               if (WebSession.get().signIn(login, pass, Type.oauth, serverId)) 
{
+               if (u != null && WebSession.get().signIn(u)) {
                        setResponsePage(Application.get().getHomePage());
                } else {
                        log.error("Failed to login via OAuth2!");

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
 Wed Aug 12 10:39:39 2015
@@ -46,6 +46,7 @@ import org.apache.wicket.request.resourc
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
@@ -158,7 +159,8 @@ public abstract class RecordingResourceR
                                                public void 
writeData(Attributes attributes) throws IOException {
                                                        IResourceStream rStream 
= getResourceStream();
                                                        try {
-                                                               
writeStream(attributes, rStream.getInputStream());
+                                                               final Response 
response = attributes.getResponse();
+                                                               
Streams.copy(rStream.getInputStream(), response.getOutputStream());
                                                        } catch 
(ResourceStreamNotFoundException e1) {
                                                        } catch 
(ResponseIOException e) {
                                                                // in case of 
range operations we expecting such exceptions

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 Wed Aug 12 10:39:39 2015
@@ -18,6 +18,9 @@
  */
 package org.apache.openmeetings.core.remote;
 
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.ArrayList;
@@ -29,10 +32,12 @@ import java.util.Map;
 
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.core.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
@@ -51,8 +56,12 @@ import org.springframework.beans.factory
 public class MobileService {
        private static final Logger log = 
Red5LoggerFactory.getLogger(MainService.class, webAppRootKey);
        @Autowired
+       private ConfigurationDao cfgDao;
+       @Autowired
        private UserDao userDao;
        @Autowired
+       private IUserManager userManager;
+       @Autowired
        private SessiondataDao sessionDao;
        @Autowired
        private ISessionManager sessionManager;
@@ -67,51 +76,80 @@ public class MobileService {
                m.put(key, v == null ? "" : v);
        }
        
+       public Map<String, Object> checkServer() {
+               Map<String, Object> result = new Hashtable<>();
+               result.put("allowSelfRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, 
"0")));
+               result.put("allowSoapRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0")));
+               result.put("allowOauthRegister",  
"1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
+               return result;
+       }
+       
+       public Map<String, Object> loginGoogle(Map<String, String> umap) {
+               Map<String, Object> result = getResult();
+               try {
+                       User u = userManager.loginOAuth(umap, 2); //TODO 
hardcoded
+                       result = login(u, result);
+               } catch (Exception e) {
+                       log.error("[loginUser]", e);
+               }
+               return result;
+       }
+       
        public Map<String, Object> loginUser(String login, String password) {
-               Map<String, Object> result = new Hashtable<String, Object>();
+               Map<String, Object> result = getResult();
                try {
-                       result.put("status", -1);
                        User u = userDao.login(login, password);
-                       if (u != null) {
-                               Sessiondata sd = sessionDao.startsession();
-                               Boolean bool = 
sessionDao.updateUser(sd.getSessionId(), u.getId(), false, u.getLanguageId());
-                               if (bool == null) {
-                                       // Exception
-                               } else if (!bool) {
-                                       // invalid Session-Object
-                                       result.put("status", -35);
-                               } else {
-                                       IConnection conn = 
Red5.getConnectionLocal();
-                                       String streamId = 
conn.getClient().getId();
-                                       Client c = 
sessionManager.getClientByStreamId(streamId, null);
-                                       if (c == null) {
-                                               c = 
sessionManager.addClientListItem(streamId, conn.getScope().getName(), 
conn.getRemotePort(),
-                                                       
conn.getRemoteAddress(), "", false, null);
-                                       }
-                                       
-                                       
SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
-                                       c.setUserId(u.getId());
-                                       c.setFirstname(u.getFirstname());
-                                       c.setLastname(u.getLastname());
-                                       c.setMobile(true);
-                                       
sessionManager.updateClientByStreamId(streamId, c, false, null);
-
-                                       add(result, "sid", sd.getSessionId());
-                                       add(result, "publicSid", 
c.getPublicSID());
-                                       add(result, "status", 0);
-                                       add(result, "userId", u.getId());
-                                       add(result, "firstname", 
u.getFirstname());
-                                       add(result, "lastname", 
u.getLastname());
-                                       add(result, "login", u.getLogin());
-                                       add(result, "email", u.getAddress() == 
null ? "" : u.getAddress().getEmail());
-                                       add(result, "language", 
u.getLanguageId()); //TODO rights
-                               }
-                       }
+                       result = login(u, result);
                } catch (Exception e) {
                        log.error("[loginUser]", e);
                }
                return result;
        }
+       
+       private Map<String, Object> getResult() {
+               Map<String, Object> result = new Hashtable<>();
+               result.put("status", -1);
+               return result;
+       }
+       
+       private Map<String, Object> login(User u, Map<String, Object> result) {
+               if (u != null) {
+                       Sessiondata sd = sessionDao.startsession();
+                       Boolean bool = sessionDao.updateUser(sd.getSessionId(), 
u.getId(), false, u.getLanguageId());
+                       if (bool == null) {
+                               // Exception
+                       } else if (!bool) {
+                               // invalid Session-Object
+                               result.put("status", -35);
+                       } else {
+                               IConnection conn = Red5.getConnectionLocal();
+                               String streamId = conn.getClient().getId();
+                               Client c = 
sessionManager.getClientByStreamId(streamId, null);
+                               if (c == null) {
+                                       c = 
sessionManager.addClientListItem(streamId, conn.getScope().getName(), 
conn.getRemotePort(),
+                                               conn.getRemoteAddress(), "", 
false, null);
+                               }
+                               
+                               
SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
+                               c.setUserId(u.getId());
+                               c.setFirstname(u.getFirstname());
+                               c.setLastname(u.getLastname());
+                               c.setMobile(true);
+                               sessionManager.updateClientByStreamId(streamId, 
c, false, null);
+
+                               add(result, "sid", sd.getSessionId());
+                               add(result, "publicSid", c.getPublicSID());
+                               add(result, "status", 0);
+                               add(result, "userId", u.getId());
+                               add(result, "firstname", u.getFirstname());
+                               add(result, "lastname", u.getLastname());
+                               add(result, "login", u.getLogin());
+                               add(result, "email", u.getAddress() == null ? 
"" : u.getAddress().getEmail());
+                               add(result, "language", u.getLanguageId()); 
//TODO rights
+                       }
+               }
+               return result;
+       }
        
        public List<Map<String, Object>> getVideoStreams() {
                List<Map<String, Object>> result = new 
ArrayList<Map<String,Object>>();

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
 Wed Aug 12 10:39:39 2015
@@ -18,11 +18,17 @@
  */
 package org.apache.openmeetings.db.dao.user;
 
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
 
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.Userdata;
 
@@ -44,6 +50,11 @@ public interface IUserManager {
                        String userOffers, String userSearchs, Boolean 
showContactData,
                        Boolean showContactDataToContacts, String 
activatedHash) throws Exception;
 
+       Long getLanguage(Locale loc);
+       State getCountry(Locale loc);
+       User loginOAuth(Map<String, String> params, long serverId) throws 
IOException, NoSuchAlgorithmException;
+
+       /** TODO FIXME seems to be unused **/
        Boolean kickUserByStreamId(String SID, Long roomId);
        
        Boolean kickUserByPublicSID(String SID, String publicSID);

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Wed Aug 12 10:39:39 2015
@@ -37,6 +37,7 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
@@ -293,6 +294,7 @@ public class ImportInitvalues {
 
                cfgDao.add(CONFIG_FRONTEND_REGISTER_KEY, 
cfg.allowFrontendRegister, null, "Is user register available on login screen");
                cfgDao.add(CONFIG_SOAP_REGISTER_KEY, "1", null, "Is user 
register available via SOAP/REST");
+               cfgDao.add(CONFIG_OAUTH_REGISTER_KEY, "1", null, "Is user 
register available via OAuth");
                // this group_id is the Organisation of users who register 
through the frontend or SOAP
                cfgDao.add(CONFIG_DEFAULT_GROUP_ID, "1", null, "");
 

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
 Wed Aug 12 10:39:39 2015
@@ -19,16 +19,22 @@
 package org.apache.openmeetings.service.user;
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
 import java.util.Set;
 import java.util.TimeZone;
 
@@ -39,6 +45,7 @@ import javax.persistence.TypedQuery;
 import org.apache.openmeetings.core.mail.MailHandler;
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
@@ -51,8 +58,10 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.OrganisationUser;
+import org.apache.openmeetings.db.entity.user.State;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.db.entity.user.Userdata;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.db.util.TimezoneUtil;
@@ -82,15 +91,15 @@ public class UserManager implements IUse
        @Autowired
        private SessiondataDao sessiondataDao;
        @Autowired
-       private ConfigurationDao configurationDao;
+       private ConfigurationDao cfgDao;
        @Autowired
-       private StateDao statemanagement;
+       private StateDao stateDao;
        @Autowired
        private OrganisationDao orgDao;
        @Autowired
        private OrganisationUserDao orgUserDao;
        @Autowired
-       private UserDao usersDao;
+       private UserDao userDao;
        @Autowired
        private EmailManager emailManagement;
        @Autowired
@@ -107,7 +116,7 @@ public class UserManager implements IUse
                try {
                        SearchResult<User> sresult = new SearchResult<User>();
                        sresult.setObjectName(User.class.getName());
-                       sresult.setRecords(usersDao.count(search));
+                       sresult.setRecords(userDao.count(search));
 
                        String sort = null;
                        if (orderby != null && orderby.length() > 0) {
@@ -150,7 +159,7 @@ public class UserManager implements IUse
 
                        if (sessionData != null) {
 
-                               User u = usersDao.get(sessionData.getUserId());
+                               User u = userDao.get(sessionData.getUserId());
 
                                sessiondataDao.updateUserWithoutSession(SID, 
u.getId());
 
@@ -290,19 +299,19 @@ public class UserManager implements IUse
                        boolean generateSipUserData, String jNameTimeZone, 
Boolean sendConfirmation) {
                try {
                        // Checks if FrontEndUsers can register
-                       if 
("1".equals(configurationDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, 
String.class, "0"))) {
+                       if 
("1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0"))) {
                                if (sendConfirmation == null) {
-                                       String baseURL = 
configurationDao.getBaseUrl();
+                                       String baseURL = cfgDao.getBaseUrl();
                                        sendConfirmation = baseURL != null
                                                        && !baseURL.isEmpty()
-                                                       && 1 == 
configurationDao.getConfValue("sendEmailWithVerficationCode", Integer.class, 
"0");
+                                                       && 1 == 
cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
                                }
                                // TODO: Read and generate SIP-Data via 
RPC-Interface Issue 1098
 
                                Long userId = 
registerUserInit(UserDao.getDefaultRights(), login,
                                                Userpass, lastname, firstname, 
email, age, street,
                                                additionalname, fax, zip, 
stateId, town, languageId,
-                                               true, 
Arrays.asList(configurationDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, 
Long.class, null)), phone,
+                                               true, 
Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)), 
phone,
                                                sendSMS, sendConfirmation, 
timezoneUtil.getTimeZone(jNameTimeZone), false, "", "", false, true, null);
 
                                if (userId > 0 && sendConfirmation) {
@@ -360,13 +369,13 @@ public class UserManager implements IUse
                        Boolean showContactDataToContacts, String 
activatedHash) throws Exception {
                // TODO: make phone number persistent
                // Check for required data
-               if (login.length() >= getMinLoginLength(configurationDao)) {
+               if (login.length() >= getMinLoginLength(cfgDao)) {
                        // Check for duplicates
-                       boolean checkName = usersDao.checkLogin(login, 
User.Type.user, null, null);
-                       boolean checkEmail = Strings.isEmpty(email) || 
usersDao.checkEmail(email, User.Type.user, null, null);
+                       boolean checkName = userDao.checkLogin(login, 
User.Type.user, null, null);
+                       boolean checkEmail = Strings.isEmpty(email) || 
userDao.checkEmail(email, User.Type.user, null, null);
                        if (checkName && checkEmail) {
 
-                               String link = configurationDao.getBaseUrl();
+                               String link = cfgDao.getBaseUrl();
                                String hash = activatedHash;
                                if (hash == null){
                                        hash = 
ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(login
@@ -380,7 +389,7 @@ public class UserManager implements IUse
                                        if (!sendMail.equals("success"))
                                                return -19L;
                                }
-                               Address adr =  usersDao.getAddress(street, zip, 
town, stateId, additionalname, fax, phone, email);
+                               Address adr =  userDao.getAddress(street, zip, 
town, stateId, additionalname, fax, phone, email);
 
                                // If this user needs first to click his E-Mail 
verification
                                // code then set the status to 0
@@ -392,7 +401,7 @@ public class UserManager implements IUse
                                for (Long id : organisations) {
                                        orgList.add(new 
OrganisationUser(orgDao.get(id)));
                                }
-                               User u = usersDao.addUser(rights, firstname, 
login, lastname, languageId,
+                               User u = userDao.addUser(rights, firstname, 
login, lastname, languageId,
                                                password, adr, sendSMS, age, 
hash, timezone,
                                                forceTimeZoneCheck, userOffers, 
userSearchs, showContactData,
                                                showContactDataToContacts, 
null, null, orgList, null);
@@ -427,7 +436,7 @@ public class UserManager implements IUse
                        Long users_id = sessiondataDao.checkSession(SID);
 
                        // admins only
-                       if 
(AuthLevelUtil.hasAdminLevel(usersDao.getRights(users_id))) {
+                       if 
(AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
 
                                sessiondataDao.clearSessionByRoomId(room_id);
 
@@ -459,7 +468,7 @@ public class UserManager implements IUse
                        Long userId = sessiondataDao.checkSession(SID);
 
                        // admins only
-                       if 
(AuthLevelUtil.hasWebServiceLevel(usersDao.getRights(userId))) {
+                       if 
(AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
                                Client rcl = 
sessionManager.getClientByPublicSID(publicSID, false, null);
 
                                if (rcl == null) {
@@ -485,4 +494,87 @@ public class UserManager implements IUse
                }
                return null;
        }
+       
+       public Long getLanguage(Locale loc) {
+               if (loc != null) {
+                       for (Map.Entry<Long, Locale> e : 
LabelDao.languages.entrySet()) {
+                               if (loc.equals(e.getValue())) {
+                                       return e.getKey();
+                               }
+                       }
+               }
+               return cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, 
"1");
+       }
+
+       public State getCountry(Locale loc) {
+               List<State> states = stateDao.get();
+               if (loc != null) {
+                       String code = loc.getISO3Country().toUpperCase();
+                       for (State s : states) {
+                               if 
(s.getShortName().toUpperCase().equals(code)) {
+                                       return s;
+                               }
+                       }
+               }
+               return states.get(0);
+       }
+
+       public User loginOAuth(Map<String, String> params, long serverId) 
throws IOException, NoSuchAlgorithmException {
+               String login = params.get("login");
+               String email = params.get("email");
+               String lastname = params.get("lastname");
+               String firstname = params.get("firstname");
+               if (firstname == null) {
+                       firstname = "";
+               }
+               if (lastname == null) {
+                       lastname = "";
+               }
+               if (!userDao.validLogin(login)) {
+                       log.error("Invalid login, please check parameters");
+                       return null; //TODO FIXME need to be checked
+               }
+               User u = userDao.getByLogin(login, Type.oauth, serverId);
+               if (!userDao.checkEmail(email, Type.oauth, serverId, u == null 
? null : u.getId())) {
+                       log.error("Another user with the same email exists");
+                       return null; //TODO FIXME need to be checked
+               }
+               // generate random password
+               byte[] rawPass = new byte[25];
+               Random rnd = new Random();
+               for (int i = 0; i < rawPass.length; ++i) {
+                       rawPass[i] = (byte) ('!' + rnd.nextInt(93));
+               }
+               String pass = new String(rawPass, "UTF-8");
+               // check if the user already exists and register new one if 
it's needed
+               if (u == null) {
+                       u = userDao.getNewUserInstance(null);
+                       u.setType(Type.oauth);
+                       u.getRights().remove(Right.Login);;
+                       u.setDomainId(serverId);
+                       u.getOrganisationUsers().add(new 
OrganisationUser(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, 
Long.class, "-1"))));
+                       u.setLogin(login);
+                       u.setShowContactDataToContacts(true);
+                       u.setLastname(lastname);
+                       u.setFirstname(firstname);
+                       u.getAddress().setEmail(email);
+                       String picture = params.get("picture");
+                       if (picture != null) {
+                               u.setPictureuri(picture);
+                       }
+                       String locale = params.get("locale");
+                       if (locale != null) {
+                               Locale loc = Locale.forLanguageTag(locale);
+                               if (loc != null) {
+                                       u.setLanguageId(getLanguage(loc));
+                                       
u.getAddress().setState(getCountry(loc));
+                               }
+                       }
+               }
+               //TODO FIXME should we update fields on login ????
+               u.setLastlogin(new Date());
+               u = userDao.update(u, pass, -1);
+               
+               return u;
+       }
 }

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 Wed Aug 12 10:39:39 2015
@@ -25,6 +25,7 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_DEFAULT_LANG_KEY = "default_lang_id";
        public static final String CONFIG_FRONTEND_REGISTER_KEY = 
"allow_frontend_register";
        public static final String CONFIG_SOAP_REGISTER_KEY = 
"allow.soap.register";
+       public static final String CONFIG_OAUTH_REGISTER_KEY = 
"allow.oauth.register";
        public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = 
"user.login.minimum.length";
        public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = 
"max_upload_size";
        public static final String CONFIG_PASS_MIN_LENGTH_KEY = 
"user.pass.minimum.length";

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
 Wed Aug 12 10:39:39 2015
@@ -37,7 +37,6 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
 
@@ -47,7 +46,7 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
 import org.apache.openmeetings.db.entity.server.SOAPLogin;
@@ -246,8 +245,6 @@ public class WebSession extends Abstract
        }
        
        public boolean signIn(String login, String password, Type type, Long 
domainId) {
-               Sessiondata sessData = 
getBean(SessiondataDao.class).startsession();
-               SID = sessData.getSessionId();
                try {
                        User u = null;
                        switch (type) {
@@ -268,7 +265,7 @@ public class WebSession extends Abstract
                        if (u == null) {
                                return false;
                        }
-                       setUser(u);
+                       signIn(u);
                        return true;
                } catch (OmException oe) {
                        loginError = oe.getCode() == null ? -1L : oe.getCode();
@@ -276,6 +273,16 @@ public class WebSession extends Abstract
                return false;
        }
        
+       public boolean signIn(User u) {
+               Sessiondata sessData = 
getBean(SessiondataDao.class).startsession();
+               SID = sessData.getSessionId();
+               if (u == null) {
+                       return false;
+               }
+               setUser(u);
+               return true;
+       }
+       
        public Long getLoginError() {
                return loginError;
        }
@@ -381,23 +388,11 @@ public class WebSession extends Abstract
        }
 
        public Long getLanguageByBrowserLocale() {
-               for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) 
{
-                       if (getBrowserLocale().equals(e.getValue())) {
-                               return e.getKey();
-                       }
-               }
-               return 
getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, 
Long.class, "1");
+               return 
getBean(IUserManager.class).getLanguage(getBrowserLocale());
        }
 
        public State getCountryByBrowserLocale() {
-               List<State> states = getBean(StateDao.class).get();
-               String code = getBrowserLocale().getISO3Country().toUpperCase();
-               for (State s : states) {
-                       if (s.getShortName().toUpperCase().equals(code)){
-                               return s;
-                       }
-               }
-               return states.get(0);
+               return 
getBean(IUserManager.class).getCountry(getBrowserLocale());
        }
 
        public String getClientTZCode() {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1695468&r1=1695467&r2=1695468&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 Wed Aug 12 10:39:39 2015
@@ -18,7 +18,6 @@
  */
 package org.apache.openmeetings.web.pages.auth;
 
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
@@ -36,10 +35,8 @@ import java.net.URLEncoder;
 import java.security.NoSuchAlgorithmException;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Random;
 
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
@@ -52,12 +49,9 @@ import javax.net.ssl.X509TrustManager;
 import org.apache.commons.io.IOUtils;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.server.OAuth2Dao;
-import org.apache.openmeetings.db.dao.user.OrganisationDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
-import org.apache.openmeetings.db.entity.user.OrganisationUser;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
@@ -337,51 +331,9 @@ public class SignInPage extends BaseInit
        }
        
        private void loginViaOAuth2(Map<String, String> params, long serverId) 
throws IOException, NoSuchAlgorithmException {
-               UserDao userDao = getBean(UserDao.class);
-               ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
-               String login = params.get("login");
-               String email = params.get("email");
-               String lastname = params.get("lastname");
-               String firstname = params.get("firstname");
-               if (firstname == null) {
-                       firstname = "";
-               }
-               if (lastname == null) {
-                       lastname = "";
-               }
-               if (!userDao.validLogin(login)) {
-                       log.error("Invalid login, please check parameters");
-                       return;
-               }
-               User u = userDao.getByLogin(login, Type.oauth, serverId);
-               if (!userDao.checkEmail(email, Type.oauth, serverId, u == null 
? null : u.getId())) {
-                       log.error("Another user with the same email exists");
-                       return;
-               }
-               // generate random password
-               byte[] rawPass = new byte[25];
-               Random rnd = new Random();
-               for (int i = 0; i < rawPass.length; ++i) {
-                       rawPass[i] = (byte) ('!' + rnd.nextInt(93));
-               }
-               String pass = new String(rawPass, "UTF-8");
-               // check if the user already exists and register new one if 
it's needed
-               if (u == null) {
-                       u = userDao.getNewUserInstance(null);
-                       u.setType(Type.oauth);
-                       u.getRights().remove(Right.Login);;
-                       u.setDomainId(serverId);
-                       u.getOrganisationUsers().add(new 
OrganisationUser(getBean(OrganisationDao.class).get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID,
 Long.class, "-1"))));
-                       u.setLogin(login);
-                       u.setShowContactDataToContacts(true);
-                       u.setLastname(lastname);
-                       u.setFirstname(firstname);
-                       u.getAddress().setEmail(email);
-               }
-               u.setLastlogin(new Date());
-               u = userDao.update(u, pass, -1);
+               User u = getBean(IUserManager.class).loginOAuth(params, 
serverId);
                
-               if (WebSession.get().signIn(login, pass, Type.oauth, serverId)) 
{
+               if (u != null && WebSession.get().signIn(u)) {
                        setResponsePage(Application.get().getHomePage());
                } else {
                        log.error("Failed to login via OAuth2!");


Reply via email to