OpenMeetings (4) -- -- -- 새 사용자 등록

16851 단어 open
사용자 로그인 및 등록의 주요 코드는 WebContent\src\base\auth\checkLoginData입니다.lzx 파일
 
    <simpleLabelButton labelid="123" name="_register" width="160" y="$once{ parent.height-40 }" 

        visible="false" x="510" height="22">

        <handler name="onclick">

            <![CDATA[

                this.parent._register.setAttribute('visible',false);

                if (this.parent.childObj != null) {

                    this.parent.childObj.destroy();

                }

                this.parent.childObj = new lz.registerNewUser(canvas,{

                                                    refObj:this.parent,

                                                    user_login_minimum_length:parent.user_login_minimum_length,

                                                    user_pass_minimum_length:parent.user_pass_minimum_length

                                                });

            ]]>

        </handler>

    </simpleLabelButton>


메인 화면에서 [Not a member?]를 클릭버튼을 누르면registerNewUser()를 호출하여 등록 인터페이스에서 벗어나username,password,email 등 일련의 정보를 기입한 후 [Register]를 누르면 다음과 같은 코드를 실행합니다.
 
 
   <simpleLabelButton name="registerB" labelid="121" width="120" x="240" y="332">

    	<handler name="onclick">

            <![CDATA[

                var pwd1 = strtrim(this.parent.userpass1.getText());

                var pwd2 = strtrim(this.parent.userpass2.getText());   

                var login = strtrim(this.parent.username.getText());     

                var email = strtrim(this.parent.email.getText()); 

                if (pwd1!=pwd2) {

					new lz.rpcErrorDialog(canvas,{errorid:-6});

				} else if(pwd1.length<parent.user_pass_minimum_length 

						|| login<parent.user_login_minimum_length){

				    var addInfo = "<br/> "

				    					+ parent.user_pass_minimum_length + " / " 

				    					+ parent.user_login_minimum_length;

                    new lz.rpcErrorDialog(canvas,{errorid:-7,addInfo:addInfo});

                } else if (email=="") {

                    new lz.rpcErrorDialog(canvas,{errorid:-53});

                } else {

                    this.parent.regObject = new Array();

                    this.parent.regObject["SID"]=canvas.sessionId;

                    this.parent.regObject["Username"]=login;

                    this.parent.regObject["Userpass"]=this.parent.userpass1.getText();

                    this.parent.regObject["lastname"]=this.parent.lastname.getText();

                    this.parent.regObject["firstname"]=this.parent.firstname.getText();

                    this.parent.regObject["email"]=email;

                    this.parent.regObject["jNameTimeZone"]=this.parent._timeZone.getValue();

                    this.parent.regObject["age"]=0;

                    this.parent.regObject["street"]='';

                    this.parent.regObject["additionalname"]='';

                    this.parent.regObject["fax"]='';

                    this.parent.regObject["zip"]='';

                    this.parent.regObject["states_id"]=Number(this.parent._state.getValue());

                    this.parent.regObject["town"]='';

                    this.parent.regObject["language_id"]=this.parent.languages.getValue();

                    

                    this.parent.regObject["domain"]=canvas.rtmphostlocal; 

                    this.parent.regObject["port"]=canvas.red5httpport; 

                    this.parent.regObject["webapp"]=canvas.httpRootKey; 

                    

                    if( $debug ) Debug.write("parent.regObject: ",parent.regObject);

                    

                    this.parent.registerUserByObject.doCall();

                }

            ]]>

    	</handler>

    </simpleLabelButton> 

 
 
다음과 같이 registerUserByObject()가 호출되었습니다.
     <netRemoteCallHib name="registerUserByObject" funcname="xmlcrm.registerUserByObject" 

     	remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >     

        <netparam>

        	<method name="getValue"> 

        		return this.parent.parent.regObject; 

        	</method>

        </netparam>           

         <handler name="ondata" args="value">

         	<![CDATA[

            //The onResult-Handler will be called be the rtmpconnection

            if ($debug) Debug.write("registerUserByObject: ",value);

			if (!(value<0)){

				//Debug.write("successfully registered");

                 new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:-18});

                 this.parent.refObj.username.setAttribute('text',this.parent.username.getText());

                 this.parent.refObj.userpass.setAttribute('text',this.parent.userpass1.getText());

                 this.parent.close();

			} else if (value == -40) {

				this.parent.refObj.username.setAttribute('text',this.parent.username.getText());

                this.parent.refObj.userpass.setAttribute('text',this.parent.userpass1.getText());

                this.parent.close();

			}

			]]>

         </handler>  

     </netRemoteCallHib>

이것은 원격 호출입니다. 이것은 서버의registerUserByObject () 함수를 호출합니다. (src\org\apache\openmeetings\remote\MainService.java에서)
 
	public Long registerUserByObject(Object regObjectObj) {

		try {

			@SuppressWarnings("unchecked")

			Map<?, ?> regObject = (Map<Object, Object>) regObjectObj;



			String domain = regObject.get("domain").toString();

			String port = regObject.get("port").toString();

			String webapp = regObject.get("webapp").toString();



			String baseURL = "http://" + domain + ":" + port + webapp;

			if (port.equals("80")) {

				baseURL = "http://" + domain + webapp;

			} else if (port.equals("443")) {

				baseURL = "https://" + domain + webapp;

			}

			String tz = (String)regObject.get("jNameTimeZone");

			if (tz == null || tz.length() == 0) {

				//Empty tz

				return -55L;

			}

			return userManager.registerUser(regObject.get("Username")

					.toString(), regObject.get("Userpass").toString(),

					regObject.get("lastname").toString(),

					regObject.get("firstname").toString(),

					regObject.get("email").toString(), new Date(), regObject

							.get("street").toString(),

					regObject.get("additionalname").toString(),

					regObject.get("fax").toString(), regObject.get("zip")

							.toString(),

					Long.valueOf(regObject.get("states_id").toString())

							.longValue(), regObject.get("town").toString(),

					Long.valueOf(regObject.get("language_id").toString())

							.longValue(), "", false, baseURL, true,

					tz);

		} catch (Exception ex) {

			log.error("registerUserByObject", ex);

		}

		return new Long(-1);

	}

 
이 안에 userManager가 또 호출되었습니다.registerUser (), 코드를 따라 추적하면 호출 관계는 다음과 같습니다.
 
 
	public Long registerUser(String login, String Userpass, String lastname,

			String firstname, String email, Date age, String street,

			String additionalname, String fax, String zip, long states_id,

			String town, long language_id, String phone, boolean sendSMS, String baseURL,

			boolean generateSipUserData, String jNameTimeZone) {

		

		boolean sendConfirmation = baseURL != null

				&& !baseURL.isEmpty()

				&& 1 == configurationDao.getConfValue(

						"sendEmailWithVerficationCode", Integer.class, "0");

		

		return registerUser(login, Userpass, lastname, firstname, email, age,

				street, additionalname, fax, zip, states_id, town, language_id,

				phone, sendSMS, baseURL, generateSipUserData, jNameTimeZone, sendConfirmation);

	}

 
 |
 |
V
 
private Long registerUser(String login, String Userpass, String lastname,

			String firstname, String email, Date age, String street,

			String additionalname, String fax, String zip, long states_id,

			String town, long language_id, String phone, boolean sendSMS, String baseURL,

			boolean generateSipUserData, String jNameTimeZone, Boolean sendConfirmation) {

		try {

			// Checks if FrontEndUsers can register

			if ("1".equals(configurationDao.getConfValue(

					"allow_frontend_register", String.class, "0"))) {

				

				// TODO: Read and generate SIP-Data via RPC-Interface Issue 1098



				Long user_id = this.registerUserInit(3, 1, 0, 1, login,

						Userpass, lastname, firstname, email, age, street,

						additionalname, fax, zip, states_id, town, language_id,

						true, Arrays.asList(configurationDao.getConfValue(

								"default_domain_id", Long.class, null)), phone,

						sendSMS, baseURL,

						sendConfirmation, jNameTimeZone, false, "", "", false, true);



				if (sendConfirmation) {

					return new Long(-40);

				}



				return user_id;

			}

		} catch (Exception e) {

			log.error("[registerUser]", e);

		}

		return null;

	}

 
 |
 |
V
	public Long registerUserInit(long user_level, long level_id, int availible,

			int status, String login, String password, String lastname,

			String firstname, String email, Date age, String street,

			String additionalname, String fax, String zip, long states_id,

			String town, long language_id, boolean sendWelcomeMessage,

			List<Long> organisations, String phone, boolean sendSMS, String baseURL,

			Boolean sendConfirmation, String jname_timezone, Boolean forceTimeZoneCheck,

			String userOffers, String userSearchs, Boolean showContactData,

			Boolean showContactDataToContacts) throws Exception {

		return registerUserInit(user_level, level_id, availible,

				status, login, password, lastname,

				firstname, email, age, street,

				additionalname, fax, zip, states_id,

				town, language_id, sendWelcomeMessage,

				organisations, phone, sendSMS, baseURL,

				sendConfirmation,

				omTimeZoneDaoImpl.getOmTimeZone(jname_timezone), forceTimeZoneCheck,

				userOffers, userSearchs, showContactData,

				showContactDataToContacts);

	}

 |
 |
V
	public Long registerUserInit(long user_level, long level_id, int availible,

			int status, String login, String password, String lastname,

			String firstname, String email, Date age, String street,

			String additionalname, String fax, String zip, long states_id,

			String town, long language_id, boolean sendWelcomeMessage,

			List<Long> organisations, String phone, boolean sendSMS, String baseURL,

			Boolean sendConfirmation,

			OmTimeZone timezone, Boolean forceTimeZoneCheck,

			String userOffers, String userSearchs, Boolean showContactData,

			Boolean showContactDataToContacts) throws Exception {

		// TODO: make phone number persistent

		// User Level must be at least Admin

		// Moderators will get a temp update of there UserLevel to add Users to

		// their Group

		if (authLevelUtil.checkModLevel(user_level)) {



			Integer userLoginMinimumLength = configurationDao.getConfValue(

					"user.login.minimum.length", Integer.class, "4");

			if (userLoginMinimumLength == null) {

				throw new Exception(

						"user.login.minimum.length problem");

			}



			// Check for required data

			if (login.length() >= userLoginMinimumLength.intValue()) {

				// Check for duplicates

				boolean checkName = usersDao.checkUserLogin(login);

				boolean checkEmail = emailManagement.checkUserEMail(email);

				if (checkName && checkEmail) {



					String hash = cryptManager

							.getInstanceOfCrypt()

							.createPassPhrase(

									login

											+ CalendarPatterns

													.getDateWithTimeByMiliSeconds(new Date()));

					String link = baseURL + "activateUser?u=" + hash;



					if (sendWelcomeMessage && email.length() != 0) {

						// We need to pass the baseURL to check if this is

						// really set to be send

						String sendMail = emailManagement.sendMail(login,

								password, email, link, sendConfirmation);

						if (!sendMail.equals("success"))

							return new Long(-19);

					}

					Address adr =  new Address();

					adr.setStreet(street);

					adr.setZip(zip);

					adr.setTown(town);

					adr.setStates(statemanagement.getStateById(states_id));

					adr.setAdditionalname(additionalname);

					adr.setComment("");

					adr.setFax(fax);

					adr.setPhone(phone);

					adr.setEmail(email);



					// If this user needs first to click his E-Mail verification

					// code then set the status to 0

					if (sendConfirmation) {

						status = 0;

					}



					Long user_id = addUser(level_id, availible, status,

							firstname, login, lastname, language_id, password,

							adr, sendSMS, age, hash, timezone,

							forceTimeZoneCheck, userOffers, userSearchs,

							showContactData, showContactDataToContacts, organisations);

					log.debug("Added user-Id " + user_id);

					if (user_id == null) {

						return new Long(-111);

					}



					/*

					 * Long adress_emails_id =

					 * emailManagement.registerEmail(email, address_id,""); if

					 * (adress_emails_id==null) { return new Long(-112); }

					 */



					if (adr.getAdresses_id() > 0 && user_id > 0) {

						return user_id;

					} else {

						return new Long(-16);

					}

				} else {

					if (!checkName) {

						return new Long(-15);

					} else if (!checkEmail) {

						return new Long(-17);

					}

				}

			} else {

				return new Long(-13);

			}

		}

		return new Long(-1);

	}

 
 |
 |
V
 
	public Long addUser(long level_id, int availible, int status,

			String firstname, String login, String lastname, long language_id,

			String userpass, Address adress, boolean sendSMS, Date age, String hash,

			OmTimeZone timezone,

			Boolean forceTimeZoneCheck, String userOffers, String userSearchs,

			Boolean showContactData, Boolean showContactDataToContacts, List<Long> orgIds) {

		try {



			User users = new User();

			users.setFirstname(firstname);

			users.setLogin(login);

			users.setLastname(lastname);

			users.setAge(age);

			users.setAdresses(adress);

			users.setSendSMS(sendSMS);

			users.setAvailible(availible);

			users.setLastlogin(new Date());

			users.setLasttrans(new Long(0));

			users.setLevel_id(level_id);

			users.setStatus(status);

			users.setSalutations_id(1L);

			users.setStarttime(new Date());

			users.setActivatehash(hash);

			users.setOmTimeZone(timezone);

			users.setForceTimeZoneCheck(forceTimeZoneCheck);



			users.setUserOffers(userOffers);

			users.setUserSearchs(userSearchs);

			users.setShowContactData(showContactData);

			users.setShowContactDataToContacts(showContactDataToContacts);



			// this is needed cause the language is not a needed data at

			// registering

			if (language_id != 0) {

				users.setLanguage_id(new Long(language_id));

			} else {

				users.setLanguage_id(null);

			}

			users.updatePassword(cryptManager, configurationDao, userpass);

			users.setRegdate(new Date());

			users.setDeleted(false);

			

			//new user add organizations without checks

			if (orgIds != null) {

				List<Organisation_Users> orgList = users.getOrganisation_users();

				for (Long orgId : orgIds) {

					orgList.add(organisationManager.getOrgUser(orgId, null));

				}

			}

			return addUser(users);



		} catch (Exception ex2) {

			log.error("[registerUser]", ex2);

		}

		return null;

	}

 
 |
 |
V
마지막으로 사용자 정보를 데이터베이스에 삽입합니다.
 
	public Long addUser(User usr) {

		try {

			em.persist(usr);

			//em.refresh(usr);

			em.flush();



			return usr.getUser_id();

		} catch (Exception ex2) {

			log.error("[addUser]", ex2);

		}

		return null;

	}

여기까지 새로운 사용자의 등록 과정을 완성했습니다!
 

좋은 웹페이지 즐겨찾기