public boolean signIn()

in openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java [277:340]


	public boolean signIn(String secureHash, boolean markUsed) {
		SOAPLogin soapLogin = soapDao.get(secureHash);
		if (soapLogin == null) {
			log.warn("Secure hash not found in DB");
			return false;
		}
		log.debug("Secure hash found, is used ? {}", soapLogin.isUsed());
		if (!soapLogin.isUsed() || soapLogin.getAllowSameURLMultipleTimes()) {
			Sessiondata sd = sessionDao.check(soapLogin.getSessionHash());
			log.debug("Do we have data for hash ? {}", (sd.getXml() != null));
			if (sd.getXml() != null) {
				RemoteSessionObject remoteUser = RemoteSessionObject.fromString(sd.getXml());
				log.debug("Hash data was parsed successfuly; containg exterlaId ? {}", !Strings.isEmpty(remoteUser.getExternalId()));
				if (!Strings.isEmpty(remoteUser.getExternalId())) {
					Room r;
					if (Strings.isEmpty(soapLogin.getExternalRoomId()) || Strings.isEmpty(soapLogin.getExternalType())) {
						r = roomDao.get(soapLogin.getRoomId());
					} else {
						r = roomDao.getExternal(soapLogin.getExternalType(), soapLogin.getExternalRoomId());
					}
					if (r == null) {
						log.warn("Room was not found");
					} else {
						redirectHash(r, () -> {});
					}
					User user = userDao.getExternalUser(remoteUser.getExternalId(), remoteUser.getExternalType());
					if (user == null) {
						user = getNewUserInstance(null);
						user.setFirstname(remoteUser.getFirstname());
						user.setLastname(remoteUser.getLastname());
						user.setLogin(remoteUser.getUsername());
						user.setType(Type.EXTERNAL);
						user.setExternalId(remoteUser.getExternalId());
						user.addGroup(groupDao.getExternal(remoteUser.getExternalType()));
						user.getRights().clear();
						user.getRights().add(Right.ROOM);
						user.getAddress().setEmail(remoteUser.getEmail());
						user.setPictureUri(remoteUser.getPictureUrl());
					} else {
						user.setFirstname(remoteUser.getFirstname());
						user.setLastname(remoteUser.getLastname());
						user.setPictureUri(remoteUser.getPictureUrl());
					}
					user = userDao.update(user, null);
					if (markUsed) {
						soapLogin.setUsed(true);
						soapLogin.setUseDate(new Date());
						soapDao.update(soapLogin);
					}
					roomId = r == null ? null : r.getId();
					sd.setUserId(user.getId());
					sd.setRoomId(roomId);
					sessionDao.update(sd);
					setUser(user, null);
					recordingId = soapLogin.getRecordingId();
					soap = soapLogin;
					log.info("Hash was authorized");
					return true;
				}
			}
		}
		log.warn("Hash was NOT authorized");
		return false;
	}