This commit is contained in:
geek 2018-05-04 16:38:36 +09:00
parent 93be2d0e2d
commit cfa920cf37
11 changed files with 162 additions and 76 deletions

View File

@ -336,25 +336,25 @@
<activeByDefault>true</activeByDefault> <activeByDefault>true</activeByDefault>
</activation> </activation>
<properties> <properties>
<environment>local</environment> <activatedProperties>local</activatedProperties>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<id>development</id> <id>development</id>
<properties> <properties>
<environment>development</environment> <activatedProperties>development</activatedProperties>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<id>staging</id> <id>staging</id>
<properties> <properties>
<environment>staging</environment> <activatedProperties>staging</activatedProperties>
</properties> </properties>
</profile> </profile>
<profile> <profile>
<id>production</id> <id>production</id>
<properties> <properties>
<environment>production</environment> <activatedProperties>production</activatedProperties>
</properties> </properties>
</profile> </profile>
</profiles> </profiles>

View File

@ -1,6 +1,7 @@
package com.loafle.overflow.central.commons.utils; package com.loafle.overflow.central.commons.utils;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.velocity.Template;
import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException; import org.springframework.mail.MailException;
@ -41,7 +42,7 @@ public class EmailSender {
SimpleMailMessage message1 = new SimpleMailMessage(); SimpleMailMessage message1 = new SimpleMailMessage();
message1.setTo(mail.getMailTo()); message1.setTo(mail.getMailTo());
message1.setSubject(mail.getMailSubject()); message1.setSubject(mail.getMailSubject());
message1.setText(getContentFromTemplate(mail.getModel())); message1.setText(getContentFromTemplate(mail.getModel(), mail));
message1.setFrom("geek@loafle.com"); message1.setFrom("geek@loafle.com");
mailSender.send(message1); mailSender.send(message1);
@ -101,10 +102,14 @@ public class EmailSender {
return null; return null;
} }
private String getContentFromTemplate(Map<String, Object> model) { private String getContentFromTemplate(Map<String, Object> model, Mail mail) {
StringBuffer content = new StringBuffer(); StringBuffer content = new StringBuffer();
// Template template = this.velocityEngine.getTemplate("./local/vmtemplates/signup-email.vm");
try { try {
content.append(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine,"/templates/email-template.vm", "UTF-8", model)); content.append(VelocityEngineUtils.mergeTemplateIntoString
(velocityEngine,
mail.getTemplateLoacation(), "UTF-8", model));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -13,6 +13,7 @@ import com.loafle.overflow.model.domain.Domain;
import com.loafle.overflow.model.domain.DomainMember; import com.loafle.overflow.model.domain.DomainMember;
import com.loafle.overflow.model.email.EmailAuth; import com.loafle.overflow.model.email.EmailAuth;
import com.loafle.overflow.model.member.Member; import com.loafle.overflow.model.member.Member;
import com.loafle.overflow.model.meta.MetaEmailStatus;
import com.loafle.overflow.model.meta.MetaMemberStatus; import com.loafle.overflow.model.meta.MetaMemberStatus;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException; import org.springframework.mail.MailException;
@ -28,6 +29,7 @@ import java.util.*;
*/ */
@Service("EmailAuthService") @Service("EmailAuthService")
public class EmailAuthService { public class EmailAuthService {
private static final String WEB_GO_MEMBER_ADDR = "http://127.0.0.1:19080/account/";
@Autowired @Autowired
private EmailAuthDAO emailAuthDAO; private EmailAuthDAO emailAuthDAO;
@ -45,61 +47,24 @@ public class EmailAuthService {
private EmailSender emailSender; private EmailSender emailSender;
public EmailAuth sendEmailByMember(long memberId, String memberEmail) throws UnsupportedEncodingException, MailException { // private static final String WEB_NG_MEMBER_ADDR = "http://127.0.0.1:4200/auth/";
EmailAuth auth = new EmailAuth();
auth.setMember(new Member(memberId));
// Todo AuthKey Generation
String en = emailSender.encrypt(memberEmail);
auth.setEmailAuthKey(en);
String encode = URLEncoder.encode(en, "UTF-8");
// System.out.println("encode = [" + encode + "]");
Mail mail = new Mail();
mail.setMailTo(memberEmail);
mail.setMailSubject("Confirm Email");
mail.setMailContent("http://127.0.0.1:19080/account/check_email?key="+ encode +"\r\nConfirm Email");
Map<String, Object> model = new HashMap<>();
model.put("firstName", auth.getMember().getName());
model.put("lastName", auth.getMember().getCompanyName());
model.put("location", "Seoul");
model.put("signature", "www.loafle.com");
mail.setModel(model);
emailSender.sendSimpleEmail(mail);
this.emailAuthDAO.save(auth);
return auth;
}
public EmailAuth read(long id) { public EmailAuth read(long id) {
return this.emailAuthDAO.findOne(id); return this.emailAuthDAO.findOne(id);
} }
public EmailAuth readByAuthKey(String authKey) throws OverflowException, UnsupportedEncodingException { public EmailAuth readBySignupAuthKey(String token) throws OverflowException, UnsupportedEncodingException {
System.out.println("authKey = [" + authKey + "]"); System.out.println("authKey = [" + token + "]");
String deStr = URLDecoder.decode(authKey, "UTF-8"); String deStr = URLDecoder.decode(token, "UTF-8");
System.out.println("deStr = [" + deStr + "]"); System.out.println("deStr = [" + deStr + "]");
EmailAuth auth = this.emailAuthDAO.findByEmailAuthKey(deStr); EmailAuth auth = this.emailAuthDAO.findByEmailAuthKey(deStr);
// Todo Compare email date and current date
if (auth != null) { if (auth != null) {
// Over 12 hours of validity of e-mail authentication. boolean res = this.isValidateTime(auth);
Calendar cal = Calendar.getInstance();
cal.setTime(auth.getCreateDate()); if (!res) {
cal.add(Calendar.HOUR, 12);
Date futureDate = cal.getTime();
Date nowDate = new Date();
if (!nowDate.before(futureDate)) {
throw new OverflowException("The authentication expiration time has passed.", new Throwable()); throw new OverflowException("The authentication expiration time has passed.", new Throwable());
} }
@ -121,8 +86,26 @@ public class EmailAuthService {
return auth; return auth;
} }
public EmailAuth readByPwAuthKey(String token) throws OverflowException, UnsupportedEncodingException {
String deStr = URLDecoder.decode(token, "UTF-8");
EmailAuth auth = this.emailAuthDAO.findByEmailAuthKey(deStr);
if (auth != null && (auth.getMember() != null && auth.getMember().getId() > 0)) {
boolean res = this.isValidateTime(auth);
if (!res) {
throw new OverflowException("The authentication expiration time has passed.", new Throwable());
}
auth.setAuthConfirmDate(new Date());
this.emailAuthDAO.save(auth);
}
return auth;
}
// dZQgXM1o/Cx48X8DM+6ec/oPfqA2l/LdWtijOZ2EnWk= // dZQgXM1o/Cx48X8DM+6ec/oPfqA2l/LdWtijOZ2EnWk=
// dZQgXM1o/Cx48X8DM 6ec/oPfqA2l/LdWtijOZ2EnWk=
public List<EmailAuth> readByMember(long memberId) { public List<EmailAuth> readByMember(long memberId) {
return this.emailAuthDAO.findByMember(new Member(memberId)); return this.emailAuthDAO.findByMember(new Member(memberId));
@ -132,28 +115,76 @@ public class EmailAuthService {
return this.emailAuthDAO.save(emailAuth); return this.emailAuthDAO.save(emailAuth);
} }
public EmailAuth sendEmailByMember(Member member) throws OverflowException {
return this.sendEMail(member, 1);
}
// Todo Send Email Refactoring // Todo Send Email Refactoring
public EmailAuth sendEmailResetPassword(Member member) throws UnsupportedEncodingException, MailException { public EmailAuth sendEmailResetPassword(Member member) throws OverflowException {
return this.sendEMail(member, 2);
}
private boolean isValidateTime(EmailAuth auth) {
Calendar cal = Calendar.getInstance();
cal.setTime(auth.getCreateDate());
cal.add(Calendar.HOUR, 12);
Date futureDate = cal.getTime();
Date nowDate = new Date();
if (!nowDate.before(futureDate)) {
return false;
}
return true;
}
private EmailAuth sendEMail(Member member, int status) throws OverflowException {
String enMail = emailSender.encrypt(member.getEmail());
String mailSubject = null;
String entry = null;
String templateName = null;
EmailAuth auth = new EmailAuth(); EmailAuth auth = new EmailAuth();
auth.setMember(member); auth.setMember(member);
// Todo AuthKey Generation auth.setEmailAuthKey(enMail);
auth.setEmailStatus(new MetaEmailStatus(status));
String en = emailSender.encrypt(member.getEmail());
auth.setEmailAuthKey(en);
String encode = URLEncoder.encode(en, "UTF-8");
// System.out.println("encode = [" + encode + "]"); // System.out.println("encode = [" + encode + "]");
String encode = "";
try {
encode = URLEncoder.encode(enMail, "UTF-8");
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (status == 1) {
mailSubject = "Signup Confirm Mail";
entry = "confirm_signup";
templateName = "./vmtemplates/signup.vm";
} else if (status == 2) {
mailSubject = "Reset Password Confirm Mail";
entry = "confirm_reset_pw";
templateName = "./vmtemplates/password_reset.vm";
}
Mail mail = new Mail(); Mail mail = new Mail();
mail.setMailTo(member.getEmail()); mail.setMailTo(member.getEmail());
mail.setMailSubject("Reset Password Email"); mail.setMailSubject(mailSubject);
mail.setMailContent("http://127.0.0.1:9091/#/account/reset_password?key="+ encode +"\r\nConfirm Email"); mail.setTemplateLoacation(templateName);
String uri = WEB_GO_MEMBER_ADDR + entry + "?key=" + encode;
Map<String, Object> model = new HashMap<>(); Map<String, Object> model = new HashMap<>();
model.put("firstName", auth.getMember().getName()); model.put("firstName", auth.getMember().getName());
model.put("lastName", auth.getMember().getCompanyName()); model.put("lastName", auth.getMember().getCompanyName());
model.put("location", "Seoul"); model.put("location", "Seoul");
model.put("signature", "www.loafle.com"); model.put("signature", "www.loafle.com");
model.put("content", uri);
mail.setModel(model); mail.setModel(model);
emailSender.sendSimpleEmail(mail); emailSender.sendSimpleEmail(mail);
@ -161,6 +192,34 @@ public class EmailAuthService {
return auth; return auth;
} }
} }
// EmailAuth auth = new EmailAuth();
// auth.setMember(member);
// String en = emailSender.encrypt(member.getEmail());
// auth.setEmailAuthKey(en);
// auth.setEmailStatus(new MetaEmailStatus(1));
// String encode = URLEncoder.encode(en, "UTF-8");
//
//// System.out.println("encode = [" + encode + "]");
// Mail mail = new Mail();
// mail.setMailTo(member.getEmail());
// mail.setMailSubject("Confirm Email");
//// mail.setMailContent("http://127.0.0.1:19080/account/confirm_signup?key="+ encode +"\r\nConfirm Email");
//
// String uri = WEB_GO_MEMBER_ADDR + "confirm_signup?key=" + encode + "\r\nConfirm Email";
// Map<String, Object> model = new HashMap<>();
// model.put("firstName", auth.getMember().getName());
// model.put("lastName", auth.getMember().getCompanyName());
// model.put("location", "Seoul");
// model.put("signature", "www.loafle.com");
// model.put("content", uri);
//
// mail.setModel(model);
// emailSender.sendSimpleEmail(mail);
//
// this.emailAuthDAO.save(auth);
//
// return auth;

View File

@ -109,7 +109,7 @@ public class CentralMemberService implements MemberService {
Member resMember = this.memberDAO.save(member); Member resMember = this.memberDAO.save(member);
try { try {
this.emailAuthService.sendEmailByMember(member.getId(), member.getEmail()); this.emailAuthService.sendEmailByMember(resMember);
} catch (Exception e) { } catch (Exception e) {
// Todo ReSend Mail // Todo ReSend Mail
e.printStackTrace(); e.printStackTrace();
@ -135,11 +135,11 @@ public class CentralMemberService implements MemberService {
return member; return member;
} }
public Member resetPassword(String encodeEmail, String pw) throws OverflowException { public Member resetPassword(String signinID, String newPw) throws OverflowException {
String deStr = null; String deStr = null;
try { try {
deStr = URLDecoder.decode(encodeEmail, "UTF-8"); deStr = URLDecoder.decode(signinID, "UTF-8");
}catch (Exception e) { }catch (Exception e) {
} }
@ -151,7 +151,7 @@ public class CentralMemberService implements MemberService {
throw new OverflowException("", null); throw new OverflowException("", null);
} }
boolean checkPass = this.isPasswordStrong(pw); boolean checkPass = this.isPasswordStrong(newPw);
if (!checkPass) { if (!checkPass) {
throw new OverflowException("PasswordNotStrongException()", new Throwable()); throw new OverflowException("PasswordNotStrongException()", new Throwable());
@ -159,7 +159,7 @@ public class CentralMemberService implements MemberService {
// "special character, lowercase letter, and number, " + // "special character, lowercase letter, and number, " +
// "and must be at least 6 characters long."); // "and must be at least 6 characters long.");
} }
member.setPw(passwordEncoder.encode(pw)); member.setPw(passwordEncoder.encode(newPw));
return this.modify(member); return this.modify(member);
} }

View File

@ -1,6 +1,7 @@
package com.loafle.overflow.central.module.probe.service; package com.loafle.overflow.central.module.probe.service;
import com.loafle.overflow.central.module.probe.dao.ProbeDAO; import com.loafle.overflow.central.module.probe.dao.ProbeDAO;
import com.loafle.overflow.core.annotation.WebappAPI;
import com.loafle.overflow.core.exception.OverflowException; import com.loafle.overflow.core.exception.OverflowException;
import com.loafle.overflow.model.domain.Domain; import com.loafle.overflow.model.domain.Domain;
import com.loafle.overflow.model.probe.Probe; import com.loafle.overflow.model.probe.Probe;

View File

@ -0,0 +1 @@
spring.profiles.active=@activatedProperties@

View File

@ -864,7 +864,10 @@ INSERT INTO public.meta_history_type (id,create_date,"name") VALUES (
INSERT INTO public.meta_history_type (id,create_date,"name") VALUES ( INSERT INTO public.meta_history_type (id,create_date,"name") VALUES (
6,'2017-08-23 13:28:26.966','Sensor'); 6,'2017-08-23 13:28:26.966','Sensor');
INSERT INTO public.meta_email_status (id,create_date,"name") VALUES (
1,'2017-08-23 13:28:26.966','signup confirm');
INSERT INTO public.meta_email_status (id,create_date,"name") VALUES (
2,'2017-08-23 13:28:26.966','reset password confirm');
@ -885,11 +888,11 @@ INSERT INTO public."member" (company_name,create_date,email,"name",phone,pw,stat
INSERT INTO public."member" (company_name,create_date,email,"name",phone,pw,status_id) VALUES ( INSERT INTO public."member" (company_name,create_date,email,"name",phone,pw,status_id) VALUES (
'loafle','2017-06-26 11:07:27.625','geekdev@naver.com','geek','000-000-0000','$2a$10$G2bbjoX9.fOnxJx/8DZqPujFYrEQtIEB.f98/8K20XiGWEhwPakZ.',2); 'loafle','2017-06-26 11:07:27.625','geekdev@naver.com','geek','000-000-0000','$2a$10$G2bbjoX9.fOnxJx/8DZqPujFYrEQtIEB.f98/8K20XiGWEhwPakZ.',2);
INSERT INTO public.email_auth (auth_confirm_date,create_date,email_auth_key,member_id) VALUES ( INSERT INTO public.email_auth (auth_confirm_date,create_date,email_auth_key,member_id, status) VALUES (
'2017-06-27 15:28:48.895','2017-06-26 15:28:48.895','dbseogns1234',1); '2017-06-27 15:28:48.895','2017-06-26 15:28:48.895','dbseogns1234',1,1);
INSERT INTO public.email_auth (auth_confirm_date,create_date,email_auth_key,member_id) VALUES ( INSERT INTO public.email_auth (auth_confirm_date,create_date,email_auth_key,member_id, status) VALUES (
'2017-12-26 15:28:48.895','2017-11-22 12:28:48.895','dbseogns1234',2); '2017-12-26 15:28:48.895','2017-11-22 12:28:48.895','dbseogns1234',2,1);
INSERT INTO public."domain" (create_date,"name") VALUES ( INSERT INTO public."domain" (create_date,"name") VALUES (
'2017-06-26 11:25:44.866','overFlow''s domain'); '2017-06-26 11:25:44.866','overFlow''s domain');

View File

@ -2,7 +2,7 @@
mail.host=smtp.worksmobile.com mail.host=smtp.worksmobile.com
mail.port=465 mail.port=465
mail.username=geek@loafle.com mail.username=geek@loafle.com
mail.password=@loafle@5795 mail.password=@cosmos@5795
mail.protocol=smtps mail.protocol=smtps
mail.properties.mail.smtp.auth=true mail.properties.mail.smtp.auth=true

View File

@ -4,7 +4,7 @@
<body> <body>
<p>Dear ${firstName} ${lastName},</p> <p>Dear ${firstName} ${lastName},</p>
<p>Sending Email <b>Velocity Template Test !!!</b></p> <p>Sending Email <b>${content}</b></p>
<p>Thanks</p> <p>Thanks</p>
<p>${signature}</p> <p>${signature}</p>
<p>${location}</p> <p>${location}</p>

View File

@ -0,0 +1,13 @@
<html>
<head></head>
<body>
<p>Dear ${firstName} ${lastName},</p>
<p>Sending Email <b>${content}</b></p>
<p>Thanks</p>
<p>${signature}</p>
<p>${location}</p>
</body>
</html>

View File

@ -3,6 +3,7 @@ package com.loafle.overflow.central.module.email.service;
import com.loafle.overflow.central.spring.AppConfigTest; import com.loafle.overflow.central.spring.AppConfigTest;
import com.loafle.overflow.model.email.EmailAuth; import com.loafle.overflow.model.email.EmailAuth;
import com.loafle.overflow.model.member.Member;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -28,7 +29,10 @@ public class EmailAuthServiceTest {
@Test @Test
@Ignore @Ignore
public void TestMailSend() throws Exception { public void TestMailSend() throws Exception {
this.emailAuthService.sendEmailByMember((long)1, "geek@loafle.com"); Member member = new Member();
member.setId(1);
member.setEmail("overflow@loafle.com");
this.emailAuthService.sendEmailByMember(member);
} }
@Test @Test