1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package com.renatodelgaudio.awsupdate;
23
24 import static com.renatodelgaudio.awsupdate.EnvUtil.buildRoute53;
25 import static com.renatodelgaudio.awsupdate.EnvUtil.getAwsFilePath;
26 import static org.apache.commons.lang.StringUtils.equalsIgnoreCase;
27 import static org.apache.commons.lang.StringUtils.isBlank;
28 import static org.apache.commons.lang.StringUtils.isNotBlank;
29 import static org.apache.commons.lang.StringUtils.trim;
30
31 import java.io.File;
32
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35 import org.springframework.beans.factory.annotation.Value;
36
37 import com.amazonaws.services.route53.AmazonRoute53;
38
39 public class PropertyConfig implements Configuration {
40
41 private final static Logger log = LoggerFactory.getLogger(PropertyConfig.class);
42
43
44 @Value("${zone.id}")
45 protected String zoneId;
46 @Value("${record.name}")
47 private String recordName;
48 @Value("${record.ttl}")
49 private String ttl;
50 @Value("${mailsender.host}")
51 private String mailSenderHost;
52 @Value("${mailsender.protocol}")
53 private String mailSenderProtocol;
54 @Value("${mailsender.port}")
55 private String mailSenderPort;
56 @Value("${mailsender.username}")
57 private String mailSenderUsername;
58 @Value("${mailsender.password}")
59 private String mailSenderPassword;
60 @Value("${mailsender.from}")
61 private String mailSenderFrom;
62 @Value("${mailsender.to}")
63 private String mailSenderTo;
64 @Value("${mailsender.enable}")
65 private String mailsenderEnable;
66
67
68
69
70 private AmazonRoute53 r53;
71
72 private String maskPasswd(String passwd){
73 if (isBlank(passwd)){
74 return "";
75 }
76 int len = passwd.length();
77 StringBuilder sb = new StringBuilder(len);
78 for(int i=0;i<len;i++)
79 sb.append("X");
80 return sb.toString();
81 }
82
83 @Override
84 public boolean isConfigOK() {
85 try{
86 String awsPath = getAwsFilePath();
87 r53 = buildRoute53(new File(awsPath));
88
89 boolean ok = isNotBlank(zoneId) && isNotBlank(recordName) && isNotBlank(ttl);
90 if(!ok) {
91 log.error("Configuration is not OK. Please check that aws.properties contains correct values for zone.id, record.name and record.ttl");
92 log.error("zoneId:"+zoneId);
93 log.error("recordName:"+recordName);
94 log.error("ttl:"+ttl);
95 }
96
97 boolean mailOK = !equalsIgnoreCase(mailsenderEnable,"true") || (isNotBlank(mailSenderHost) && isNotBlank(mailSenderProtocol) && isNotBlank(mailSenderPort) &&
98 isNotBlank(mailSenderUsername) && isNotBlank(mailSenderPassword) && isNotBlank(mailSenderFrom) && isNotBlank(mailSenderTo)) ;
99 if(!mailOK) {
100 log.warn("Configuration email is not OK. Emails might not send out" );
101 log.warn("Please check that aws.properties contains at least all values for mailsender.* properties" );
102 log.warn("mailSenderHost:"+mailSenderHost);
103 log.warn("mailSenderProtocol:"+mailSenderProtocol);
104 log.warn("mailSenderPort:"+mailSenderPort);
105 log.warn("mailSenderUsername:"+mailSenderUsername);
106 log.warn("mailSenderPassword:"+maskPasswd(mailSenderPassword));
107 log.warn("mailSenderFrom:"+mailSenderFrom);
108 log.warn("mailSenderTo:"+mailSenderTo);
109 }
110 return ok;
111 }catch(Exception e){
112 log.error("Wrong configuration or incomplete installation. Please try to re-install and complete the post installation configuration.");
113 return false;
114 }
115 }
116
117 @Override
118 public String getZoneId() {
119 return trim(zoneId);
120 }
121
122 @Override
123 public String getRecordName() {
124 return trim(recordName);
125 }
126 @Override
127 public AmazonRoute53 getAmazonClient() {
128 return r53;
129 }
130
131 @Override
132 public String getTTL() {
133 return ttl;
134 }
135
136 }