You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2015/08/12 12:39:40 UTC
svn commit: r1695468 - in /openmeetings:
branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/user/
branches/3.0.x/src/install/java/org/apache/openmeetings/installation/
branches/3.0.x/src/main/java/org/apache/openmeetings/data/user/
branches/3.0....
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!");