View Javadoc

1   /**
2    * Copyright (c) 2015 Renato Del Gaudio
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in all 
12   * copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
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 }