| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.config; |
| 2 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 3 | import de.ids_mannheim.korap.interfaces.EncryptionIface; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 4 | import de.ids_mannheim.korap.user.Attributes; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 5 | import de.ids_mannheim.korap.utils.TimeUtils; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 6 | import lombok.Getter; |
| 7 | import org.apache.log4j.PropertyConfigurator; |
| 8 | import org.slf4j.Logger; |
| Michael Hanl | ac113e5 | 2016-01-19 15:49:20 +0100 | [diff] [blame] | 9 | import org.slf4j.LoggerFactory; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 10 | |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 11 | import java.io.File; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 12 | import java.io.FileInputStream; |
| 13 | import java.io.IOException; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 14 | import java.io.InputStream; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 15 | import java.net.MalformedURLException; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 16 | import java.net.URL; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 17 | import java.util.*; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 18 | |
| 19 | /** |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 20 | * if configuration class is extended, loadSubTypes method should be overriden |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 21 | * |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 22 | * @author hanl |
| 23 | * @date 05/02/2014 |
| 24 | */ |
| 25 | |
| 26 | @Getter |
| 27 | public class KustvaktConfiguration { |
| 28 | |
| Michael Hanl | e17eaa5 | 2016-01-22 20:55:05 +0100 | [diff] [blame] | 29 | public static final Map<String, Object> KUSTVAKT_USER = new HashMap<>(); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 30 | |
| 31 | static { |
| Michael Hanl | e17eaa5 | 2016-01-22 20:55:05 +0100 | [diff] [blame] | 32 | KUSTVAKT_USER.put(Attributes.ID, 1); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 33 | 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 Hanl | 7368aa4 | 2016-02-05 18:15:47 +0100 | [diff] [blame] | 37 | KUSTVAKT_USER.put(Attributes.ADDRESS, "Mannheim"); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 38 | KUSTVAKT_USER.put(Attributes.FIRSTNAME, "Kustvakt"); |
| 39 | KUSTVAKT_USER.put(Attributes.LASTNAME, "KorAP"); |
| 40 | KUSTVAKT_USER.put(Attributes.INSTITUTION, "IDS Mannheim"); |
| 41 | } |
| 42 | |
| Michael Hanl | ac113e5 | 2016-01-19 15:49:20 +0100 | [diff] [blame] | 43 | private static final Logger jlog = LoggerFactory |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 44 | .getLogger(KustvaktConfiguration.class); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 45 | 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 Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 49 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 50 | private String serverHost; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 51 | private URL issuer; |
| 52 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 53 | 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 Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 79 | private String default_pos; |
| 80 | private String default_lemma; |
| Michael Hanl | f21773f | 2015-10-16 23:02:31 +0200 | [diff] [blame] | 81 | private String default_token; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 82 | private String default_dep; |
| 83 | private String default_const; |
| 84 | |
| 85 | // deprec?! |
| 86 | private final BACKENDS DEFAULT_ENGINE = BACKENDS.LUCENE; |
| 87 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 88 | /** |
| 89 | * loading of the properties and mapping to parameter variables |
| 90 | * |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 91 | * @param properties |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 92 | * @return |
| 93 | */ |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 94 | protected Properties load(Properties properties) |
| 95 | throws MalformedURLException { |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 96 | maxhits = new Integer(properties.getProperty("maxhits", "50000")); |
| 97 | returnhits = new Integer(properties.getProperty("returnhits", "50000")); |
| Michael Hanl | 88b49db | 2016-02-16 17:15:43 +0100 | [diff] [blame] | 98 | //todo: refactor to krill.indexDir |
| Michael Hanl | a0f3f94 | 2016-02-17 15:15:51 +0100 | [diff] [blame] | 99 | indexDir = properties.getProperty("krill.indexDir", ""); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 100 | // 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 Hanl | 2760cc4 | 2015-11-16 19:30:01 +0100 | [diff] [blame] | 112 | port = new Integer(properties.getProperty("server.port", "8095")); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 113 | // server options |
| 114 | serverHost = String |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 115 | .valueOf(properties.getProperty("server.host", "localhost")); |
| 116 | String queries = properties.getProperty("korap.ql", ""); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 117 | String[] qls = queries.split(","); |
| 118 | queryLanguages = new ArrayList<>(); |
| 119 | for (String querylang : qls) |
| 120 | queryLanguages.add(querylang.trim().toUpperCase()); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 121 | String is = properties.getProperty("kustvakt.security.jwt.issuer", ""); |
| 122 | |
| 123 | if (!is.startsWith("http")) |
| 124 | is = "http://" + is; |
| 125 | issuer = new URL(is); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 126 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 127 | 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 Hanl | f21773f | 2015-10-16 23:02:31 +0200 | [diff] [blame] | 132 | default_token = properties |
| 133 | .getProperty("kustvakt.default.token", "opennlp"); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 134 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 135 | // 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 Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 171 | } |
| 172 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 173 | /** |
| 174 | * set properties |
| 175 | * |
| 176 | * @param props |
| 177 | */ |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 178 | public void setProperties(Properties props) throws MalformedURLException { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 179 | this.load(props); |
| 180 | } |
| 181 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 182 | /** |
| 183 | * properties can be overloaded after spring init |
| 184 | * |
| 185 | * @param stream |
| 186 | */ |
| Michael Hanl | 5c743c0 | 2015-06-19 18:05:17 +0200 | [diff] [blame] | 187 | public void setPropertiesAsStream(InputStream stream) { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 188 | try { |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 189 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 190 | Properties p = new Properties(); |
| 191 | p.load(stream); |
| 192 | this.load(p); |
| 193 | }catch (IOException e) { |
| 194 | e.printStackTrace(); |
| 195 | } |
| 196 | |
| 197 | } |
| 198 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 199 | 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 Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 206 | public static void loadLog4jLogger() { |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 207 | /** loadSubTypes log4j configuration file programmatically */ |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 208 | Properties log4j = new Properties(); |
| 209 | try { |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 210 | File f = new File(System.getProperty("user.dir"), |
| 211 | "log4j.properties"); |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 212 | if (f.exists()) { |
| 213 | log4j.load(new FileInputStream(f)); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 214 | PropertyConfigurator.configure(log4j); |
| Michael Hanl | 4b42baa | 2015-11-17 21:46:04 +0100 | [diff] [blame] | 215 | jlog.info( |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 216 | "using local logging properties file ({}) to configure logging system", |
| Michael Hanl | 3819151 | 2015-11-17 16:48:59 +0100 | [diff] [blame] | 217 | "./log4j.properties"); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 218 | return; |
| 219 | } |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 220 | }catch (Exception e) { |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 221 | // do nothing |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 222 | } |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 223 | loadClassLogger(); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 224 | } |
| 225 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 226 | private static void loadClassLogger() { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 227 | 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 | } |