ActionChangePassword.java 3.9 KB
Newer Older
R
roo00 已提交
1 2 3 4 5
package com.x.organization.assemble.personal.jaxrs.password;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;

6
import com.google.gson.JsonElement;
R
roo00 已提交
7 8
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
9
import com.x.base.core.project.annotation.FieldDescribe;
R
roo00 已提交
10
import com.x.base.core.project.config.Config;
11
import com.x.base.core.project.exception.ExceptionPersonNotExist;
12
import com.x.base.core.project.gson.GsonPropertyObject;
R
roo00 已提交
13 14
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
15
import com.x.base.core.project.jaxrs.WrapBoolean;
R
roo00 已提交
16 17 18 19 20 21 22 23 24 25
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.Crypto;
import com.x.organization.assemble.personal.Business;
import com.x.organization.core.entity.Person;

class ActionChangePassword extends ActionBase {

	private static Logger logger = LoggerFactory.getLogger(ActionChangePassword.class);

26
	ActionResult<Wo> execute(EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
R
roo00 已提交
27 28
		/* 管理员不可以修改密码 */
		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
29 30
			ActionResult<Wo> result = new ActionResult<>();
			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
R
roo00 已提交
31 32 33 34 35 36 37
			Business business = new Business(emc);
			if (Config.token().isInitialManager(effectivePerson.getDistinguishedName())) {
				throw new ExceptionEditInitialManagerDeny();
			}
			Person person = business.person().pick(effectivePerson.getDistinguishedName());
			person = emc.find(person.getId(), Person.class);
			if (null == person) {
O
o2sword 已提交
38
				throw new ExceptionPersonNotExist(effectivePerson.getDistinguishedName());
R
roo00 已提交
39
			}
40
			if (StringUtils.isEmpty(wi.getOldPassword())) {
R
roo00 已提交
41 42
				throw new ExceptionOldPasswordEmpty();
			}
43
			if (StringUtils.isEmpty(wi.getNewPassword())) {
R
roo00 已提交
44 45
				throw new ExceptionNewPasswordEmpty();
			}
46
			if (StringUtils.isEmpty(wi.getConfirmPassword())) {
R
roo00 已提交
47 48
				throw new ConfirmPasswordEmptyException();
			}
49
			if (!StringUtils.equals(wi.getNewPassword(), wi.getConfirmPassword())) {
R
roo00 已提交
50 51
				throw new ExceptionTwicePasswordNotMatch();
			}
52
			if (StringUtils.equals(wi.getNewPassword(), wi.getOldPassword())) {
R
roo00 已提交
53 54 55
				throw new ExceptionNewPasswordSameAsOldPassword();
			}
			if (BooleanUtils.isTrue(Config.person().getSuperPermission())
56
					&& StringUtils.equals(Config.token().getPassword(), wi.getOldPassword())) {
R
roo00 已提交
57 58
				logger.info("user{name:" + person.getName() + "} use superPermission.");
			} else {
Z
zhourui 已提交
59
				if (!StringUtils.equals(
60
						Crypto.encrypt(wi.getOldPassword(), Config.token().getKey(), Config.person().getEncryptType()),
R
roo00 已提交
61 62 63
						person.getPassword())) {
					throw new ExceptionOldPasswordNotMatch();
				}
R
update  
roo00 已提交
64 65
				if (!wi.getNewPassword().matches(Config.person().getPasswordRegex())) {
					throw new ExceptionInvalidPassword(Config.person().getPasswordRegexHint());
R
roo00 已提交
66
				}
R
update  
roo00 已提交
67

R
roo00 已提交
68 69
			}
			emc.beginTransaction(Person.class);
70
			business.person().setPassword(person, wi.getNewPassword());
R
roo00 已提交
71
			emc.commit();
72 73 74
			Wo wo = new Wo();
			wo.setValue(true);
			result.setData(wo);
R
roo00 已提交
75 76 77 78
			return result;
		}
	}

79 80 81 82 83
	public static class Wo extends WrapBoolean {
	}

	public static class Wi extends GsonPropertyObject {

84
		@FieldDescribe("原密码")
85
		private String oldPassword;
86 87

		@FieldDescribe("新密码")
88
		private String newPassword;
89 90

		@FieldDescribe("确认新密码")
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
		private String confirmPassword;

		public String getOldPassword() {
			return oldPassword;
		}

		public void setOldPassword(String oldPassword) {
			this.oldPassword = oldPassword;
		}

		public String getConfirmPassword() {
			return confirmPassword;
		}

		public void setConfirmPassword(String confirmPassword) {
			this.confirmPassword = confirmPassword;
		}

		public String getNewPassword() {
			return newPassword;
		}

		public void setNewPassword(String newPassword) {
			this.newPassword = newPassword;
		}

	}

R
roo00 已提交
119
}