| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.config; |
| 2 | |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 3 | import java.io.File; |
| 4 | import java.io.FileInputStream; |
| 5 | import java.io.IOException; |
| 6 | import java.io.InputStream; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 7 | import java.net.URL; |
| 8 | import java.util.ArrayList; |
| 9 | import java.util.HashMap; |
| 10 | import java.util.List; |
| 11 | import java.util.Map; |
| 12 | import java.util.Properties; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 13 | |
| 14 | import org.apache.log4j.PropertyConfigurator; |
| 15 | import org.slf4j.Logger; |
| 16 | import org.slf4j.LoggerFactory; |
| 17 | |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 18 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 19 | import de.ids_mannheim.korap.utils.TimeUtils; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 20 | import lombok.Getter; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 21 | |
| 22 | /** |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 23 | * if configuration class is extended, loadSubTypes method should be |
| 24 | * overriden |
| 25 | * |
| margaretha | 0c47c65 | 2017-04-19 18:44:40 +0200 | [diff] [blame] | 26 | * @author hanl, margaretha |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 27 | * @date 05/02/2014 |
| 28 | */ |
| 29 | |
| 30 | @Getter |
| 31 | public class KustvaktConfiguration { |
| 32 | |
| Michael Hanl | e17eaa5 | 2016-01-22 20:55:05 +0100 | [diff] [blame] | 33 | public static final Map<String, Object> KUSTVAKT_USER = new HashMap<>(); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 34 | |
| Michael Hanl | ac113e5 | 2016-01-19 15:49:20 +0100 | [diff] [blame] | 35 | private static final Logger jlog = LoggerFactory |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 36 | .getLogger(KustvaktConfiguration.class); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 37 | private String indexDir; |
| 38 | private int port; |
| 39 | // todo: make exclusive so that the containg languages can really only be used then |
| 40 | private List<String> queryLanguages; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 41 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 42 | private String serverHost; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 43 | private URL issuer; |
| 44 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 45 | private int maxhits; |
| 46 | private int returnhits; |
| 47 | private String keystoreLocation; |
| 48 | private String keystorePassword; |
| 49 | private Properties mailProperties; |
| 50 | private String host; |
| 51 | private String shibUserMapping; |
| 52 | private String userConfig; |
| 53 | private int inactiveTime; |
| 54 | private int loginAttemptTTL; |
| 55 | private long loginAttemptNum; |
| 56 | private boolean allowMultiLogIn; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 57 | private int loadFactor; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 58 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 59 | private int validationStringLength; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 60 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 61 | private int validationEmaillength; |
| margaretha | 6d61a55 | 2018-04-10 19:26:44 +0200 | [diff] [blame] | 62 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 63 | private byte[] sharedSecret; |
| Michael Hanl | cb2d3f9 | 2016-06-02 17:34:06 +0200 | [diff] [blame] | 64 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 65 | private String adminToken; |
| 66 | private int longTokenTTL; |
| 67 | private int tokenTTL; |
| 68 | private int shortTokenTTL; |
| 69 | private String[] rewrite_strategies; |
| 70 | private String passcodeSaltField; |
| 71 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 72 | private String default_pos; |
| 73 | private String default_lemma; |
| Michael Hanl | f21773f | 2015-10-16 23:02:31 +0200 | [diff] [blame] | 74 | private String default_token; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 75 | private String default_dep; |
| 76 | private String default_const; |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 77 | private ArrayList<String> foundries; |
| 78 | private ArrayList<String> layers; |
| 79 | |
| margaretha | ea68a0a | 2017-09-21 03:09:49 +0200 | [diff] [blame] | 80 | private String baseURL; |
| 81 | |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 82 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 83 | // deprec?! |
| 84 | private final BACKENDS DEFAULT_ENGINE = BACKENDS.LUCENE; |
| 85 | |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 86 | public KustvaktConfiguration (Properties properties) throws IOException { |
| 87 | load(properties); |
| 88 | } |
| 89 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 90 | /** |
| 91 | * loading of the properties and mapping to parameter variables |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 92 | * |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 93 | * @param properties |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 94 | * @return |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 95 | * @throws IOException |
| 96 | * @throws KustvaktException |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 97 | */ |
| margaretha | 56e8e55 | 2017-12-05 16:31:21 +0100 | [diff] [blame] | 98 | protected void load (Properties properties) |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 99 | throws IOException { |
| margaretha | ea68a0a | 2017-09-21 03:09:49 +0200 | [diff] [blame] | 100 | baseURL = properties.getProperty("kustvakt.base.url", "/api/*"); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 101 | maxhits = new Integer(properties.getProperty("maxhits", "50000")); |
| 102 | returnhits = new Integer(properties.getProperty("returnhits", "50000")); |
| Michael Hanl | a0f3f94 | 2016-02-17 15:15:51 +0100 | [diff] [blame] | 103 | indexDir = properties.getProperty("krill.indexDir", ""); |
| Michael Hanl | 2760cc4 | 2015-11-16 19:30:01 +0100 | [diff] [blame] | 104 | port = new Integer(properties.getProperty("server.port", "8095")); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 105 | // server options |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 106 | serverHost = String.valueOf(properties.getProperty("server.host", |
| 107 | "localhost")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 108 | String queries = properties.getProperty("korap.ql", ""); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 109 | String[] qls = queries.split(","); |
| 110 | queryLanguages = new ArrayList<>(); |
| 111 | for (String querylang : qls) |
| 112 | queryLanguages.add(querylang.trim().toUpperCase()); |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 113 | String is = properties.getProperty("security.jwt.issuer", ""); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 114 | |
| 115 | if (!is.startsWith("http")) |
| 116 | is = "http://" + is; |
| 117 | issuer = new URL(is); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 118 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 119 | default_const = properties |
| margaretha | 6fca729 | 2018-03-13 13:19:00 +0100 | [diff] [blame] | 120 | .getProperty("default.layer.constituent", "mate"); |
| 121 | default_dep = properties.getProperty("default.layer.dependency", "mate"); |
| 122 | default_lemma = properties.getProperty("default.layer.lemma", "tt"); |
| 123 | default_pos = properties.getProperty("default.layer.partOfSpeech", "tt"); |
| 124 | default_token = properties.getProperty("default.layer.orthography", |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 125 | "opennlp"); |
| 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 | // security configuration |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 128 | inactiveTime = TimeUtils.convertTimeToSeconds(properties.getProperty( |
| 129 | "security.idleTimeoutDuration", "10M")); |
| 130 | allowMultiLogIn = Boolean.valueOf(properties |
| 131 | .getProperty("security.multipleLogIn")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 132 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 133 | loginAttemptNum = Long.parseLong(properties.getProperty( |
| 134 | "security.loginAttemptNum", "3")); |
| 135 | loginAttemptTTL = TimeUtils.convertTimeToSeconds(properties |
| 136 | .getProperty("security.authAttemptTTL", "30M")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 137 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 138 | loadFactor = Integer.valueOf(properties.getProperty( |
| 139 | "security.encryption.loadFactor", "15")); |
| 140 | validationStringLength = Integer.valueOf(properties.getProperty( |
| 141 | "security.validation.stringLength", "150")); |
| 142 | validationEmaillength = Integer.valueOf(properties.getProperty( |
| 143 | "security.validation.emailLength", "40")); |
| margaretha | 6d61a55 | 2018-04-10 19:26:44 +0200 | [diff] [blame] | 144 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 145 | sharedSecret = properties.getProperty("security.sharedSecret", "") |
| 146 | .getBytes(); |
| 147 | adminToken = properties.getProperty("security.adminToken"); |
| 148 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 149 | longTokenTTL = TimeUtils.convertTimeToSeconds(properties.getProperty( |
| 150 | "security.longTokenTTL", "100D")); |
| 151 | tokenTTL = TimeUtils.convertTimeToSeconds(properties.getProperty( |
| 152 | "security.tokenTTL", "72H")); |
| 153 | shortTokenTTL = TimeUtils.convertTimeToSeconds(properties.getProperty( |
| 154 | "security.shortTokenTTL", "3H")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 155 | |
| margaretha | 6fca729 | 2018-03-13 13:19:00 +0100 | [diff] [blame] | 156 | // passcodeSaltField = properties.getProperty("security.passcode.salt", |
| 157 | // "accountCreation"); |
| margaretha | 5af8237 | 2017-02-16 14:22:58 +0100 | [diff] [blame] | 158 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 159 | } |
| 160 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 161 | /** |
| 162 | * set properties |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 163 | * |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 164 | * @param props |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 165 | * @throws IOException |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 166 | */ |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 167 | // public void setProperties (Properties props) throws IOException { |
| 168 | // this.load(props); |
| 169 | // } |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 170 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 171 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 172 | /** |
| 173 | * properties can be overloaded after spring init |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 174 | * |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 175 | * @param stream |
| 176 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 177 | public void setPropertiesAsStream (InputStream stream) { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 178 | try { |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 179 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 180 | Properties p = new Properties(); |
| 181 | p.load(stream); |
| 182 | this.load(p); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 183 | } |
| 184 | catch (IOException e) { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 185 | e.printStackTrace(); |
| 186 | } |
| 187 | |
| 188 | } |
| 189 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 190 | |
| 191 | public BACKENDS chooseBackend (String value) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 192 | if (value == null || value.equals("null")) |
| 193 | return DEFAULT_ENGINE; |
| 194 | else |
| 195 | return Enum.valueOf(BACKENDS.class, value.toUpperCase()); |
| 196 | } |
| 197 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 198 | |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 199 | |
| 200 | public static void loadLogger () { |
| 201 | InputStream stream = ConfigLoader.loadConfigStream("log4j.properties"); |
| 202 | PropertyConfigurator.configure(stream); |
| 203 | jlog.info("Done loading logging framework Log4j!"); |
| 204 | } |
| 205 | |
| 206 | |
| 207 | |
| 208 | @Deprecated |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 209 | public static void loadLog4jLogger () { |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 210 | /** loadSubTypes log4j configuration file programmatically */ |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 211 | Properties log4j = new Properties(); |
| 212 | try { |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 213 | File f = new File(System.getProperty("user.dir"), |
| 214 | "log4j.properties"); |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 215 | if (f.exists()) { |
| 216 | log4j.load(new FileInputStream(f)); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 217 | PropertyConfigurator.configure(log4j); |
| Michael Hanl | 4b42baa | 2015-11-17 21:46:04 +0100 | [diff] [blame] | 218 | jlog.info( |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 219 | "using local logging properties file ({}) to configure logging system", |
| Michael Hanl | 3819151 | 2015-11-17 16:48:59 +0100 | [diff] [blame] | 220 | "./log4j.properties"); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 221 | return; |
| 222 | } |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 223 | } |
| 224 | catch (Exception e) { |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 225 | // do nothing |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 226 | } |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 227 | loadClassLogger(); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 228 | } |
| 229 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 230 | |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 231 | @Deprecated |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 232 | private static void loadClassLogger () { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 233 | Properties log4j = new Properties(); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 234 | jlog.info("using class path logging properties file to configure logging system"); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 235 | |
| 236 | try { |
| 237 | log4j.load(KustvaktConfiguration.class.getClassLoader() |
| 238 | .getResourceAsStream("log4j.properties")); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 239 | } |
| 240 | catch (IOException e) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 241 | // do nothing |
| 242 | } |
| 243 | |
| 244 | PropertyConfigurator.configure(log4j); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 245 | jlog.warn("No logger properties detected. Using default logger properties"); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 246 | } |
| 247 | |
| 248 | public enum BACKENDS { |
| 249 | NEO4J, LUCENE |
| 250 | } |
| 251 | |
| 252 | } |