blob: bbf133ade7c927966332212c7c106f670a0a275d [file] [log] [blame]
Michael Hanlca740d72015-06-16 10:04:58 +02001package de.ids_mannheim.korap.config;
2
Michael Hanl482f30d2015-09-25 12:39:46 +02003import de.ids_mannheim.korap.interfaces.EncryptionIface;
Michael Hanl19390652016-01-16 11:01:24 +01004import de.ids_mannheim.korap.user.Attributes;
Michael Hanl482f30d2015-09-25 12:39:46 +02005import de.ids_mannheim.korap.utils.TimeUtils;
Michael Hanlca740d72015-06-16 10:04:58 +02006import lombok.Getter;
7import org.apache.log4j.PropertyConfigurator;
8import org.slf4j.Logger;
Michael Hanlac113e52016-01-19 15:49:20 +01009import org.slf4j.LoggerFactory;
Michael Hanlca740d72015-06-16 10:04:58 +020010
Michael Hanld6eadd52015-11-11 18:30:33 +010011import java.io.File;
Michael Hanlca740d72015-06-16 10:04:58 +020012import java.io.FileInputStream;
13import java.io.IOException;
Michael Hanlbadd79c2015-06-19 07:41:03 +020014import java.io.InputStream;
Michael Hanl19390652016-01-16 11:01:24 +010015import java.net.MalformedURLException;
Michael Hanlca740d72015-06-16 10:04:58 +020016import java.net.URL;
Michael Hanl19390652016-01-16 11:01:24 +010017import java.util.*;
Michael Hanlca740d72015-06-16 10:04:58 +020018
19/**
Michael Hanl1e18cb42015-08-06 20:57:35 +020020 * if configuration class is extended, loadSubTypes method should be overriden
Michael Hanlbadd79c2015-06-19 07:41:03 +020021 *
Michael Hanlca740d72015-06-16 10:04:58 +020022 * @author hanl
23 * @date 05/02/2014
24 */
25
26@Getter
27public class KustvaktConfiguration {
28
Michael Hanle17eaa52016-01-22 20:55:05 +010029 public static final Map<String, Object> KUSTVAKT_USER = new HashMap<>();
Michael Hanl19390652016-01-16 11:01:24 +010030
31 static {
Michael Hanle17eaa52016-01-22 20:55:05 +010032 KUSTVAKT_USER.put(Attributes.ID, 1);
Michael Hanl19390652016-01-16 11:01:24 +010033 KUSTVAKT_USER.put(Attributes.USERNAME, "kustvakt");
34 KUSTVAKT_USER.put(Attributes.PASSWORD, "kustvakt2015");
35 KUSTVAKT_USER.put(Attributes.EMAIL, "kustvakt@ids-mannheim.de");
36 KUSTVAKT_USER.put(Attributes.COUNTRY, "Germany");
Michael Hanl7368aa42016-02-05 18:15:47 +010037 KUSTVAKT_USER.put(Attributes.ADDRESS, "Mannheim");
Michael Hanl19390652016-01-16 11:01:24 +010038 KUSTVAKT_USER.put(Attributes.FIRSTNAME, "Kustvakt");
39 KUSTVAKT_USER.put(Attributes.LASTNAME, "KorAP");
40 KUSTVAKT_USER.put(Attributes.INSTITUTION, "IDS Mannheim");
41 }
42
Michael Hanlac113e52016-01-19 15:49:20 +010043 private static final Logger jlog = LoggerFactory
Michael Hanld6eadd52015-11-11 18:30:33 +010044 .getLogger(KustvaktConfiguration.class);
Michael Hanlbadd79c2015-06-19 07:41:03 +020045 private String indexDir;
46 private int port;
47 // todo: make exclusive so that the containg languages can really only be used then
48 private List<String> queryLanguages;
Michael Hanlca740d72015-06-16 10:04:58 +020049
Michael Hanlca740d72015-06-16 10:04:58 +020050 private String serverHost;
Michael Hanlca740d72015-06-16 10:04:58 +020051 private URL issuer;
52
Michael Hanl482f30d2015-09-25 12:39:46 +020053 private int maxhits;
54 private int returnhits;
55 private String keystoreLocation;
56 private String keystorePassword;
57 private Properties mailProperties;
58 private String host;
59 private String shibUserMapping;
60 private String userConfig;
61 private int inactiveTime;
62 private int loginAttemptTTL;
63 private long loginAttemptNum;
64 private boolean allowMultiLogIn;
65 private int expiration;
66 private int loadFactor;
67 private int validationStringLength;
68 private int validationEmaillength;
69 // fixme: should move to base config?!
70 private EncryptionIface.Encryption encryption;
71 private byte[] sharedSecret;
72 private String adminToken;
73 private int longTokenTTL;
74 private int tokenTTL;
75 private int shortTokenTTL;
76 private String[] rewrite_strategies;
77 private String passcodeSaltField;
78
Michael Hanlbadd79c2015-06-19 07:41:03 +020079 private String default_pos;
80 private String default_lemma;
Michael Hanlf21773f2015-10-16 23:02:31 +020081 private String default_token;
Michael Hanlbadd79c2015-06-19 07:41:03 +020082 private String default_dep;
83 private String default_const;
84
85 // deprec?!
86 private final BACKENDS DEFAULT_ENGINE = BACKENDS.LUCENE;
87
Michael Hanlca740d72015-06-16 10:04:58 +020088 /**
89 * loading of the properties and mapping to parameter variables
90 *
Michael Hanl482f30d2015-09-25 12:39:46 +020091 * @param properties
Michael Hanlca740d72015-06-16 10:04:58 +020092 * @return
93 */
Michael Hanl19390652016-01-16 11:01:24 +010094 protected Properties load(Properties properties)
95 throws MalformedURLException {
Michael Hanl482f30d2015-09-25 12:39:46 +020096 maxhits = new Integer(properties.getProperty("maxhits", "50000"));
97 returnhits = new Integer(properties.getProperty("returnhits", "50000"));
Michael Hanl88b49db2016-02-16 17:15:43 +010098 //todo: refactor to krill.indexDir
Michael Hanla0f3f942016-02-17 15:15:51 +010099 indexDir = properties.getProperty("krill.indexDir", "");
Michael Hanl19390652016-01-16 11:01:24 +0100100 // URL url = KustvaktConfiguration.class.getClassLoader()
101 // .getResource(idir);
102 // System.out.println("LOADING FILE FROM CLASSPATH? " + url);
103 // if (!new File(idir).exists() && url != null) {
104 // indexDir = url.getFile();
105 // }else
106 // indexDir = idir;
107 //
108 // System.out.println(
109 // "---------------------------------------------------------------");
110 // System.out.println("INDEX DIR IS: " + indexDir);
111 // System.out.println("FILE EXISTS? " + new File(indexDir).exists());
Michael Hanl2760cc42015-11-16 19:30:01 +0100112 port = new Integer(properties.getProperty("server.port", "8095"));
Michael Hanlca740d72015-06-16 10:04:58 +0200113 // server options
114 serverHost = String
Michael Hanl482f30d2015-09-25 12:39:46 +0200115 .valueOf(properties.getProperty("server.host", "localhost"));
116 String queries = properties.getProperty("korap.ql", "");
Michael Hanlca740d72015-06-16 10:04:58 +0200117 String[] qls = queries.split(",");
118 queryLanguages = new ArrayList<>();
119 for (String querylang : qls)
120 queryLanguages.add(querylang.trim().toUpperCase());
Michael Hanl19390652016-01-16 11:01:24 +0100121 String is = properties.getProperty("kustvakt.security.jwt.issuer", "");
122
123 if (!is.startsWith("http"))
124 is = "http://" + is;
125 issuer = new URL(is);
Michael Hanlbadd79c2015-06-19 07:41:03 +0200126
Michael Hanl482f30d2015-09-25 12:39:46 +0200127 default_const = properties
128 .getProperty("kustvakt.default.const", "mate");
129 default_dep = properties.getProperty("kustvakt.default.dep", "mate");
130 default_lemma = properties.getProperty("kustvakt.default.lemma", "tt");
131 default_pos = properties.getProperty("kustvakt.default.pos", "tt");
Michael Hanlf21773f2015-10-16 23:02:31 +0200132 default_token = properties
133 .getProperty("kustvakt.default.token", "opennlp");
Michael Hanlbadd79c2015-06-19 07:41:03 +0200134
Michael Hanl482f30d2015-09-25 12:39:46 +0200135 // security configuration
136 expiration = TimeUtils.convertTimeToSeconds(properties
137 .getProperty("security.absoluteTimeoutDuration", "25M"));
138 inactiveTime = TimeUtils.convertTimeToSeconds(
139 properties.getProperty("security.idleTimeoutDuration", "10M"));
140 allowMultiLogIn = Boolean
141 .valueOf(properties.getProperty("security.multipleLogIn"));
142
143 loginAttemptNum = Long.parseLong(
144 properties.getProperty("security.loginAttemptNum", "3"));
145 loginAttemptTTL = TimeUtils.convertTimeToSeconds(
146 properties.getProperty("security.authAttemptTTL", "30M"));
147
148 loadFactor = Integer.valueOf(
149 properties.getProperty("security.encryption.loadFactor", "15"));
150 validationStringLength = Integer.valueOf(properties
151 .getProperty("security.validation.stringLength", "150"));
152 validationEmaillength = Integer.valueOf(properties
153 .getProperty("security.validation.emailLength", "40"));
154 encryption = Enum.valueOf(EncryptionIface.Encryption.class,
155 properties.getProperty("security.encryption", "BCRYPT"));
156 sharedSecret = properties.getProperty("security.sharedSecret", "")
157 .getBytes();
158 adminToken = properties.getProperty("security.adminToken");
159
160 longTokenTTL = TimeUtils.convertTimeToSeconds(
161 properties.getProperty("security.longTokenTTL", "100D"));
162 tokenTTL = TimeUtils.convertTimeToSeconds(
163 properties.getProperty("security.tokenTTL", "72H"));
164 shortTokenTTL = TimeUtils.convertTimeToSeconds(
165 properties.getProperty("security.shortTokenTTL", "3H"));
166
167 passcodeSaltField = properties
168 .getProperty("security.passcode.salt", "accountCreation");
169
170 return properties;
Michael Hanlca740d72015-06-16 10:04:58 +0200171 }
172
Michael Hanlbadd79c2015-06-19 07:41:03 +0200173 /**
174 * set properties
175 *
176 * @param props
177 */
Michael Hanl19390652016-01-16 11:01:24 +0100178 public void setProperties(Properties props) throws MalformedURLException {
Michael Hanlca740d72015-06-16 10:04:58 +0200179 this.load(props);
180 }
181
Michael Hanlbadd79c2015-06-19 07:41:03 +0200182 /**
183 * properties can be overloaded after spring init
184 *
185 * @param stream
186 */
Michael Hanl5c743c02015-06-19 18:05:17 +0200187 public void setPropertiesAsStream(InputStream stream) {
Michael Hanlbadd79c2015-06-19 07:41:03 +0200188 try {
Michael Hanld6eadd52015-11-11 18:30:33 +0100189
Michael Hanlbadd79c2015-06-19 07:41:03 +0200190 Properties p = new Properties();
191 p.load(stream);
192 this.load(p);
193 }catch (IOException e) {
194 e.printStackTrace();
195 }
196
197 }
198
Michael Hanlca740d72015-06-16 10:04:58 +0200199 public BACKENDS chooseBackend(String value) {
200 if (value == null || value.equals("null"))
201 return DEFAULT_ENGINE;
202 else
203 return Enum.valueOf(BACKENDS.class, value.toUpperCase());
204 }
205
Michael Hanl19390652016-01-16 11:01:24 +0100206 public static void loadLog4jLogger() {
Michael Hanl1e18cb42015-08-06 20:57:35 +0200207 /** loadSubTypes log4j configuration file programmatically */
Michael Hanlca740d72015-06-16 10:04:58 +0200208 Properties log4j = new Properties();
209 try {
Michael Hanl19390652016-01-16 11:01:24 +0100210 File f = new File(System.getProperty("user.dir"),
211 "log4j.properties");
Michael Hanld6eadd52015-11-11 18:30:33 +0100212 if (f.exists()) {
213 log4j.load(new FileInputStream(f));
Michael Hanlca740d72015-06-16 10:04:58 +0200214 PropertyConfigurator.configure(log4j);
Michael Hanl4b42baa2015-11-17 21:46:04 +0100215 jlog.info(
Michael Hanlca740d72015-06-16 10:04:58 +0200216 "using local logging properties file ({}) to configure logging system",
Michael Hanl38191512015-11-17 16:48:59 +0100217 "./log4j.properties");
Michael Hanl482f30d2015-09-25 12:39:46 +0200218 return;
219 }
Michael Hanlca740d72015-06-16 10:04:58 +0200220 }catch (Exception e) {
Michael Hanl482f30d2015-09-25 12:39:46 +0200221 // do nothing
Michael Hanlca740d72015-06-16 10:04:58 +0200222 }
Michael Hanl482f30d2015-09-25 12:39:46 +0200223 loadClassLogger();
Michael Hanlca740d72015-06-16 10:04:58 +0200224 }
225
Michael Hanl19390652016-01-16 11:01:24 +0100226 private static void loadClassLogger() {
Michael Hanlca740d72015-06-16 10:04:58 +0200227 Properties log4j = new Properties();
228 jlog.info(
229 "using class path logging properties file to configure logging system");
230
231 try {
232 log4j.load(KustvaktConfiguration.class.getClassLoader()
233 .getResourceAsStream("log4j.properties"));
234 }catch (IOException e) {
235 // do nothing
236 }
237
238 PropertyConfigurator.configure(log4j);
239 jlog.warn(
240 "No logger properties detected. Using default logger properties");
241 }
242
243 public enum BACKENDS {
244 NEO4J, LUCENE
245 }
246
247}