/** * 토큰 정보를 이용해 생성한 사용자 객체를 {@link Http.Context#args} 에 저장한다. 생성된 사용자가 {@link User#anonymous} 가 아니고 * 존재하는 세션 정보가 없다면 세션 정보를 생성한다. * * @see UserApp#getUserFromToken() */ public static void initTokenUser() { User user = getUserFromToken(); Http.Context.current().args.put(TOKEN_USER, user); if (!user.isAnonymous() && getUserFromSession().isAnonymous()) { addUserInfoToSession(user); } }
/** * 로그인 처리 시스템 설정에서 가입승인 기능이 활성화 되어 있고 사용자 상태가 잠금상태(미승인?)라면 계정이 잠겼다는 메시지를 노출하고 로그인 폼으로 돌아감 시스템 설정에서 * 가입승인 기능이 활성화 되어 있지 않다면, 사용자 상태가 잠금상태라도 로그인이 가능하다 (스펙확인 필요) 요청의 정보로 사용자 인증에 성공하면 로그인쿠키를 생성하고 * 로그인유지하기가 선택되었다면, 로그인유지를 위한 쿠키를 별도로 생성한다 인증에 실패하면 관련된 메시지를 노출하고 로그인 폼으로 돌아간다 * * @return */ public static Result login() { Form<User> userForm = form(User.class).bindFromRequest(); if (userForm.hasErrors()) { return badRequest(login.render("title.login", userForm)); } User sourceUser = form(User.class).bindFromRequest().get(); if (isUseSignUpConfirm()) { if (User.findByLoginId(sourceUser.loginId).state == UserState.LOCKED) { flash(Constants.WARNING, "user.locked"); return redirect(routes.UserApp.loginForm()); } } if (User.findByLoginId(sourceUser.loginId).state == UserState.DELETED) { flash(Constants.WARNING, "user.deleted"); return redirect(routes.UserApp.loginForm()); } User authenticate = authenticateWithPlainPassword(sourceUser.loginId, sourceUser.password); if (authenticate != null) { addUserInfoToSession(authenticate); if (sourceUser.rememberMe) { setupRememberMe(authenticate); } return redirect(routes.Application.index()); } flash(Constants.WARNING, "user.login.failed"); return redirect(routes.UserApp.loginForm()); }
/** * ajax 를 이용한 사용자 검색 요청 헤더의 accept 파라미터에 application/json 값이 없으면 406 응답 응답에 포함되는 데이터 수는 * MAX_FETCH_USERS 로 제한된다 입력 파라미터 query 가 부분매칭 되는 loginId 목록을 json 형태로 응답 * * @param query 검색어 * @return */ public static Result users(String query) { if (!request().accepts("application/json")) { return status(Http.Status.NOT_ACCEPTABLE); } ExpressionList<User> el = User.find.select("loginId, name").where().disjunction(); el.icontains("loginId", query); el.icontains("name", query); el.endJunction(); int total = el.findRowCount(); if (total > MAX_FETCH_USERS) { el.setMaxRows(MAX_FETCH_USERS); response().setHeader("Content-Range", "items " + MAX_FETCH_USERS + "/" + total); } List<Map<String, String>> users = new ArrayList<>(); for (User user : el.findList()) { StringBuilder sb = new StringBuilder(); sb.append(String.format("<img class='mention_image' src='%s'>", user.avatarUrl())); sb.append(String.format("<b class='mention_name'>%s</b>", user.name)); sb.append(String.format("<span class='mention_username'> @%s</span>", user.loginId)); Map<String, String> userMap = new HashMap<>(); userMap.put("info", sb.toString()); userMap.put("loginId", user.loginId); users.add(userMap); } return ok(toJson(users)); }
/** * 세션에 저장된 정보를 이용해서 사용자 객체를 생성한다. 세션에 저장된 정보가 없다면 토큰 정보를 이용해서 사용자 객체를 생성한다. 세션과 토큰 쿠키에 저장된 정보가 없다면 * anonymous 객체가 리턴된다. * * @return */ public static User currentUser() { User user = getUserFromSession(); if (!user.isAnonymous()) { return user; } return getUserFromContext(); }
public static void saveUser(User user, String verifyPassword) { // input check validation.required(user.email); validation.email(user.email); validation.min(user.password, 6); if (validation.hasErrors()) { Logger.info("用户注册输入有错误"); render("@register"); } // 此邮件是否被注册过 User userTemp = User.find("byEmailAndDeleted", user.email, false).first(); if (userTemp != null) { flash.error("此邮件己被注册"); render("@register"); } user.uuid = UUIDUtil.generate(); user.create(); Logger.info("register" + user.activated); // 放致session中 session.put("user", user.email); // 发送激活邮件 Mails.activate(user); flash.success("己成功注册激活邮件至您邮件中:" + user.email); Passport.notactivate(user.email); }
/* * 사용자 가입 입력 폼 유효성 체크 */ private static void validate(Form<User> newUserForm) { // loginId가 빈 값이 들어오면 안된다. if (newUserForm.field("loginId").value().trim().isEmpty()) { newUserForm.reject("loginId", "user.wrongloginId.alert"); } if (newUserForm.field("loginId").value().contains(" ")) { newUserForm.reject("loginId", "user.wrongloginId.alert"); } // password가 빈 값이 들어오면 안된다. if (newUserForm.field("password").value().trim().isEmpty()) { newUserForm.reject("password", "user.wrongPassword.alert"); } // 중복된 loginId로 가입할 수 없다. if (User.isLoginIdExist(newUserForm.field("loginId").value())) { newUserForm.reject("loginId", "user.loginId.duplicate"); } // 중복된 email로 가입할 수 없다. if (User.isEmailExist(newUserForm.field("email").value())) { newUserForm.reject("email", "user.email.duplicate"); } }
public static void showUpcomingBirthdays(Long id) { User current = User.findById(id); Date today = new Date(); int day = today.getDate(); Date weekLater = new Date(); weekLater.setDate(day + 7); Date almostWeekLater = new Date(); almostWeekLater.setDate(day + 6); List<Relationship> friends = current.confirmedFriends(); List<User> birthdayPeople = new ArrayList<User>(); for (Relationship x : friends) { Date friendBirthday = x.to.getProfile().birthday; if (friendBirthday == null) // The user's friend did not set a birthday date field { // x.to.getProfile().birthday = almostWeekLater; // friendBirthday = almostWeekLater; continue; } friendBirthday.setYear(today.getYear()); if (friendBirthday.before(weekLater)) birthdayPeople.add(x.to); } render(birthdayPeople, today, weekLater, almostWeekLater, day); }
public static void update(String firstName, String lastName, String email) { User user = current(); user.firstName = firstName; user.lastName = lastName; user.email = email; user.save(); edit(); }
/* * 사용자 인증 * * 사용자 객체와 hash 값을 이용 */ private static User authenticate(String loginId, String password, boolean hashed) { User user = User.findByLoginId(loginId); if (user.isAnonymous()) { return user; } String hashedPassword = hashed ? password : hashedPassword(password, user.passwordSalt); if (StringUtils.equals(user.password, hashedPassword)) { return user; } return User.anonymous; }
@Before static void setConnectedUser() { if (Security.isConnected()) { User user = User.find("byEmail", Security.connected()).first(); if (user == null) { user = new User("*****@*****.**", "1234", "Andreas"); user.save(); } renderArgs.put("user", user.fullname); } }
/* * 신규 가입 사용자 생성 */ private static User createNewUser(User user) { RandomNumberGenerator rng = new SecureRandomNumberGenerator(); user.passwordSalt = Arrays.toString(rng.nextBytes().getBytes()); user.password = hashedPassword(user.password, user.passwordSalt); User.create(user); if (isUseSignUpConfirm()) { user.changeState(UserState.LOCKED); } else { user.changeState(UserState.ACTIVE); } Email.deleteOtherInvalidEmails(user.email); return user; }
/** * Validates fields from the registration form and either creates a new user or communicates any * validation errors. */ public static Result submit() { Form<User> filledForm = signupForm.bindFromRequest(); // Check accept conditions if (!"true".equals(filledForm.field("accept").value())) { filledForm.reject("accept", "You must accept the terms and conditions"); } // Check repeated password if (!filledForm.field("password").valueOr("").isEmpty()) { if (!filledForm .field("password") .valueOr("") .equals(filledForm.field("repeatPassword").value())) { filledForm.reject("repeatPassword", "Passwords do not match"); } } // Check if the username and email are valid if (!filledForm.hasErrors()) { String un = filledForm.get().username; String email = filledForm.get().email; if (un.equals("admin") || un.equals("guest")) { filledForm.reject("username", "This username is already taken"); } try { Logger.debug("Finding user " + email); User.findByEmail(email); filledForm.reject( "email", "There is already an account associated with this email address."); } catch (Exception e) { // continue - the user does not exist } } // Return validation results to user or save user if (filledForm.hasErrors()) { return badRequest(form.render(filledForm)); } else { User user = filledForm.get(); /* create an object from a form */ User svUser = new User(user.username, user.email, user.password); /* recreate to get save group info */ svUser.save(); return ok(summary.render(svUser)); } }
/** * 토큰 정보를 이용해서 사용자 객체를 가져온다. 토큰 정보가 없거나 잘못된 정보라면 anonymous 객체를 반환한다. 잘못된 정보의 경우 토큰 정보를 삭제한다. * * @return */ private static User getUserFromToken() { Cookie cookie = request().cookies().get(TOKEN); if (cookie == null) { return User.anonymous; } String[] subject = StringUtils.split(cookie.value(), TOKEN_SEPARATOR); if (ArrayUtils.getLength(subject) != TOKEN_LENGTH) { return invalidToken(); } User user = authenticateWithHashedPassword(subject[0], subject[1]); if (user.isAnonymous()) { return invalidToken(); } return user; }
public static void save(Long id, String title, String content, String tags) { Post post; if (id == null) { // Create post User author = User.find("byEmail", Security.connected()).first(); post = new Post(author, title, content); } else { // Retrieve post post = Post.findById(id); // Edit post.title = title; post.content = content; post.tags.clear(); } // Set tags list for (String tag : tags.split("\\s+")) { if (tag.trim().length() > 0) { post.tags.add(Tag.findOrCreateByName(tag)); } } // Validate validation.valid(post); if (validation.hasErrors()) { render("@form", post); } // Save post.save(); index(); }
public static void activate(String uuid) { Logger.info("用户开始进行激活,uuid" + uuid); User user = User.find("uuid", uuid).first(); Logger.info("start activate:" + user.activated + "id:" + user.id); if (user != null) { // 激活成功 user.activated = true; user.save(); Logger.info("user id:" + user.id); render("@activatesuccess"); } else { Application.index(); } }
@Before static void setConnectedUser() { if (Security.isConnected()) { User user = User.find("byEmail", Security.connected()).first(); renderArgs.put("user", user.fullname); } }
/** * 이메일 삭제 * * @param id * @return */ @Transactional public static Result deleteEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.DELETE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } email.delete(); return redirect(routes.UserApp.editUserInfoForm()); }
/** * loginId 와 plain password 를 이용해서 사용자 인증 인증에 성공하면 DB 에서 조회된 사용자 정보를 리턴 인증에 실패하면 null 리턴 * * @param loginId 로그인ID * @param password 입력받은 비밀번호 * @return */ public static User authenticateWithPlainPassword(String loginId, String password) { User user = User.findByLoginId(loginId); if (user == User.anonymous) { return null; } return authenticate(user, hashedPassword(password, user.passwordSalt)); }
/* * 사용자 인증 * * 사용자 객체와 hash 값을 이용 */ private static User authenticate(User user, String password) { if (!user.isAnonymous()) { if (user.password.equals(password)) { return user; } } return null; }
/** * 사용자 정보 수정 * * @return */ @With(AnonymousCheckAction.class) @Transactional public static Result editUserInfo() { Form<User> userForm = new Form<>(User.class).bindFromRequest("name", "email"); String newEmail = userForm.data().get("email"); String newName = userForm.data().get("name"); User user = UserApp.currentUser(); if (StringUtils.isEmpty(newEmail)) { userForm.reject("email", "user.wrongEmail.alert"); } else { if (!StringUtils.equals(user.email, newEmail) && User.isEmailExist(newEmail)) { userForm.reject("email", "user.email.duplicate"); } } if (userForm.error("email") != null) { flash(Constants.WARNING, userForm.error("email").message()); return badRequest(edit.render(userForm, user)); } user.email = newEmail; user.name = newName; try { Long avatarId = Long.valueOf(userForm.data().get("avatarId")); if (avatarId != null) { Attachment attachment = Attachment.find.byId(avatarId); String primary = attachment.mimeType.split("/")[0].toLowerCase(); if (attachment.size > AVATAR_FILE_LIMIT_SIZE) { userForm.reject("avatarId", "user.avatar.fileSizeAlert"); } if (primary.equals("image")) { Attachment.deleteAll(currentUser().avatarAsResource()); attachment.moveTo(currentUser().avatarAsResource()); } } } catch (NumberFormatException ignored) { } Email.deleteOtherInvalidEmails(user.email); user.update(); return redirect( routes.UserApp.userInfo(user.loginId, DEFAULT_GROUP, DAYS_AGO, DEFAULT_SELECTED_TAB)); }
/** * 로그인 처리 시스템 설정에서 가입승인 기능이 활성화 되어 있고 사용자 상태가 잠금상태(미승인?)라면 계정이 잠겼다는 메시지를 노출하고 로그인 폼으로 돌아감 시스템 설정에서 * 가입승인 기능이 활성화 되어 있지 않다면, 사용자 상태가 잠금상태라도 로그인이 가능하다 (스펙확인 필요) 요청의 정보로 사용자 인증에 성공하면 로그인쿠키를 생성하고 * 로그인유지하기가 선택되었다면, 로그인유지를 위한 쿠키를 별도로 생성한다 인증에 실패하면 관련된 메시지를 노출하고 로그인 폼으로 돌아간다 * * @return */ public static Result login() { Form<User> userForm = form(User.class).bindFromRequest(); if (userForm.hasErrors()) { return badRequest(login.render("title.login", userForm, null)); } User sourceUser = form(User.class).bindFromRequest().get(); Map<String, String[]> params = request().body().asFormUrlEncoded(); String redirectUrl = HttpUtil.getFirstValueFromQuery(params, "redirectUrl"); String loginFormUrl = routes.UserApp.loginForm().absoluteURL(request()); loginFormUrl += "?redirectUrl=" + redirectUrl; if (isUseSignUpConfirm()) { if (User.findByLoginId(sourceUser.loginId).state == UserState.LOCKED) { flash(Constants.WARNING, "user.locked"); return redirect(loginFormUrl); } } if (User.findByLoginId(sourceUser.loginId).state == UserState.DELETED) { flash(Constants.WARNING, "user.deleted"); return redirect(loginFormUrl); } User authenticate = authenticateWithPlainPassword(sourceUser.loginId, sourceUser.password); if (authenticate != null) { addUserInfoToSession(authenticate); if (sourceUser.rememberMe) { setupRememberMe(authenticate); } authenticate.lang = play.mvc.Http.Context.current().lang().code(); authenticate.update(); if (StringUtils.isEmpty(redirectUrl)) { return redirect(routes.Application.index()); } else { return redirect(redirectUrl); } } flash(Constants.WARNING, "user.login.failed"); return redirect(routes.UserApp.loginForm()); }
public static void projects() { Long id = Long.parseLong(Session.current().get("user_id")); User u = User.findById(id); List<Project> projects = Project.find("owner = ?", u).fetch(); render(projects); }
/** * 보조 이메일 확인 메일 보내기 * * @param id * @return */ @Transactional public static Result sendValidationEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } email.sendValidationEmail(); flash(Constants.WARNING, "확인 메일을 전송했습니다."); return redirect(routes.UserApp.editUserInfoForm()); }
/** * 현재 사용자가 선호하는 언어를 갱신한다. * * <p>쿠키나 Accept-Language HTTP 헤더에 선호하는 언어가 설정되어 있는 경우, 그것을 현재 로그인한 사용자가 선호하는 언어로 설정한다. */ public static void updatePreferredLanguage() { Http.Request request = Http.Context.current().request(); User user = UserApp.currentUser(); if (user.isAnonymous()) { return; } if (request.acceptLanguages().isEmpty() && request.cookie(Play.langCookieName()) == null) { return; } String code = StringUtils.left(Http.Context.current().lang().code(), 255); if (!code.equals(user.lang)) { user.lang = code; user.update(); } }
@Before static void header() { Journal journal = Journal.all().first(); renderArgs.put("journal", journal); renderArgs.put("journalName", journal.name); renderArgs.put("journalDesc", journal.description); User currentUser = User.find("byEmail", Security.connected()).<User>first(); renderArgs.put("currentUser", currentUser); }
@Before static void setConnectedUser() { if (Security.isConnected()) { User user = User.find("byUsername", Security.connected()).first(); if (!user.isAdmin) { flash.error(Messages.get("UserIsNotAuthorized")); Application.index(); } } }
@Check("login") public static void index() { User curUser = User.find("byName", Secure.Security.connected()).first(); if (curUser.type == UserType.ADMINISTRATOR) { redirect("/admin/crud"); } else if (curUser.type == UserType.STUDENT) { Student.index(); } else { Teacher.index(); } }
public static void project(Long id) { Project project = Project.findById(id); Long UID = Long.parseLong(Session.current().get("user_id")); User u = User.findById(UID); if (project.canBeSeenBy(u)) { render(project); } else { projects(); } }
public static void ajaxEditDocument(Long documentId, String newTitle, String newContent) { Document document = Document.findById(documentId); document.changeSubject(newTitle); Config config = Config.getInstance(); User currentUser = User.findById(config.getSingedInUserId()); Version newVersion = new Version(currentUser, document, newContent).save(); System.out.println("* A new version is successfully created."); document.addVersion(newVersion); document.save(); }
/** * 대표 메일로 설정하기 * * @param id * @return */ @Transactional public static Result setAsMainEmail(Long id) { User currentUser = currentUser(); Email email = Email.find.byId(id); if (currentUser == null || currentUser.isAnonymous() || email == null) { return forbidden(ErrorViews.NotFound.render()); } if (!AccessControl.isAllowed(currentUser, email.user.asResource(), Operation.UPDATE)) { return forbidden(ErrorViews.Forbidden.render(Messages.get("error.forbidden"))); } String oldMainEmail = currentUser.email; currentUser.email = email.email; currentUser.removeEmail(email); currentUser.update(); Email newSubEmail = new Email(); newSubEmail.valid = true; newSubEmail.email = oldMainEmail; newSubEmail.user = currentUser; currentUser.addEmail(newSubEmail); return redirect(routes.UserApp.editUserInfoForm()); }