| 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.IOException; |
| 4 | import java.io.InputStream; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 5 | import java.util.ArrayList; |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 6 | import java.util.Arrays; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 7 | import java.util.HashMap; |
| margaretha | 2df0660 | 2018-11-14 19:10:30 +0100 | [diff] [blame] | 8 | import java.util.HashSet; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 9 | import java.util.List; |
| 10 | import java.util.Map; |
| 11 | import java.util.Properties; |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 12 | import java.util.Set; |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 13 | import java.util.regex.Pattern; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 14 | |
| margaretha | d7b7d53 | 2018-08-13 17:10:31 +0200 | [diff] [blame] | 15 | import de.ids_mannheim.korap.util.KrillProperties; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 16 | import de.ids_mannheim.korap.utils.TimeUtils; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 17 | import lombok.Getter; |
| margaretha | 339fd2e | 2018-11-13 12:14:53 +0100 | [diff] [blame] | 18 | import lombok.Setter; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 19 | |
| 20 | /** |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 21 | * Describes configuration for Kustvakt by importing properties |
| 22 | * from kustvakt.conf file and setting default values if they are |
| 23 | * not configured. |
| 24 | * |
| 25 | * MH: if configuration class is extended, loadSubTypes method should be |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 26 | * overriden |
| 27 | * |
| margaretha | 6ef00dd | 2018-09-12 14:06:38 +0200 | [diff] [blame] | 28 | * @author hanl |
| margaretha | 6ef00dd | 2018-09-12 14:06:38 +0200 | [diff] [blame] | 29 | * @author margaretha |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 30 | */ |
| 31 | |
| margaretha | 339fd2e | 2018-11-13 12:14:53 +0100 | [diff] [blame] | 32 | @Setter |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 33 | @Getter |
| 34 | public class KustvaktConfiguration { |
| 35 | |
| Michael Hanl | e17eaa5 | 2016-01-22 20:55:05 +0100 | [diff] [blame] | 36 | public static final Map<String, Object> KUSTVAKT_USER = new HashMap<>(); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 37 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 38 | private String indexDir; |
| 39 | private int port; |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 40 | // todo: make exclusive so that the containg languages can really |
| 41 | // only be used then |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 42 | private List<String> queryLanguages; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 43 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 44 | private String serverHost; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 45 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 46 | private int maxhits; |
| 47 | private int returnhits; |
| 48 | private String keystoreLocation; |
| 49 | private String keystorePassword; |
| 50 | private Properties mailProperties; |
| 51 | private String host; |
| 52 | private String shibUserMapping; |
| 53 | private String userConfig; |
| 54 | private int inactiveTime; |
| 55 | private int loginAttemptTTL; |
| 56 | private long loginAttemptNum; |
| 57 | private boolean allowMultiLogIn; |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 58 | private int loadFactor; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 59 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 60 | private int validationStringLength; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 61 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 62 | private int validationEmaillength; |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 63 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 64 | private byte[] sharedSecret; |
| Michael Hanl | cb2d3f9 | 2016-06-02 17:34:06 +0200 | [diff] [blame] | 65 | @Deprecated |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 66 | private String adminToken; |
| 67 | private int longTokenTTL; |
| 68 | private int tokenTTL; |
| 69 | private int shortTokenTTL; |
| 70 | private String[] rewrite_strategies; |
| 71 | private String passcodeSaltField; |
| 72 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 73 | private String default_pos; |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 74 | private String default_morphology; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 75 | private String default_lemma; |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame^] | 76 | private String default_orthography; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 77 | private String default_dep; |
| 78 | private String default_const; |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame^] | 79 | private String defaultStructureFoundry; |
| margaretha | a76ed24 | 2017-05-24 17:48:22 +0200 | [diff] [blame] | 80 | private ArrayList<String> foundries; |
| 81 | private ArrayList<String> layers; |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 82 | |
| margaretha | ea68a0a | 2017-09-21 03:09:49 +0200 | [diff] [blame] | 83 | private String baseURL; |
| margaretha | d7b7d53 | 2018-08-13 17:10:31 +0200 | [diff] [blame] | 84 | private Properties properties; |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 85 | |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 86 | private Set<String> supportedVersions; |
| 87 | private String currentVersion; |
| 88 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 89 | // deprec?! |
| 90 | private final BACKENDS DEFAULT_ENGINE = BACKENDS.LUCENE; |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 91 | |
| 92 | // license patterns |
| 93 | protected Pattern publicLicensePattern; |
| 94 | protected Pattern freeLicensePattern; |
| 95 | protected Pattern allLicensePattern; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 96 | |
| margaretha | 339fd2e | 2018-11-13 12:14:53 +0100 | [diff] [blame] | 97 | // random code generator |
| 98 | private String secureRandomAlgorithm; |
| 99 | private String messageDigestAlgorithm; |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 100 | |
| margaretha | 339fd2e | 2018-11-13 12:14:53 +0100 | [diff] [blame] | 101 | |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 102 | public KustvaktConfiguration (Properties properties) throws Exception { |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 103 | load(properties); |
| margaretha | d7b7d53 | 2018-08-13 17:10:31 +0200 | [diff] [blame] | 104 | KrillProperties.setProp(properties); |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 105 | } |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 106 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 107 | /** |
| 108 | * loading of the properties and mapping to parameter variables |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 109 | * |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 110 | * @param properties |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 111 | * @return |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 112 | * @throws Exception |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 113 | */ |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 114 | protected void load (Properties properties) throws Exception { |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 115 | currentVersion = properties.getProperty("current.api.version", "v1.0"); |
| 116 | String supportedVersions = |
| 117 | properties.getProperty("supported.api.version", ""); |
| margaretha | 2df0660 | 2018-11-14 19:10:30 +0100 | [diff] [blame] | 118 | |
| 119 | this.supportedVersions = new HashSet<>(Arrays.asList(supportedVersions.split(" "))); |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 120 | this.supportedVersions.add(currentVersion); |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 121 | |
| margaretha | ea68a0a | 2017-09-21 03:09:49 +0200 | [diff] [blame] | 122 | baseURL = properties.getProperty("kustvakt.base.url", "/api/*"); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 123 | maxhits = new Integer(properties.getProperty("maxhits", "50000")); |
| 124 | returnhits = new Integer(properties.getProperty("returnhits", "50000")); |
| Michael Hanl | a0f3f94 | 2016-02-17 15:15:51 +0100 | [diff] [blame] | 125 | indexDir = properties.getProperty("krill.indexDir", ""); |
| Michael Hanl | 2760cc4 | 2015-11-16 19:30:01 +0100 | [diff] [blame] | 126 | port = new Integer(properties.getProperty("server.port", "8095")); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 127 | // server options |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 128 | serverHost = String |
| 129 | .valueOf(properties.getProperty("server.host", "localhost")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 130 | String queries = properties.getProperty("korap.ql", ""); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 131 | String[] qls = queries.split(","); |
| 132 | queryLanguages = new ArrayList<>(); |
| 133 | for (String querylang : qls) |
| 134 | queryLanguages.add(querylang.trim().toUpperCase()); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 135 | |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 136 | default_const = |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 137 | properties.getProperty("default.foundry.constituent", "corenlp"); |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 138 | default_dep = |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 139 | properties.getProperty("default.foundry.dependency", "malt"); |
| 140 | default_lemma = properties.getProperty("default.foundry.lemma", "tt"); |
| 141 | default_morphology = properties.getProperty("default.foundry.morphology", "marmot"); |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 142 | default_pos = |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 143 | properties.getProperty("default.foundry.partOfSpeech", "tt"); |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame^] | 144 | default_orthography = |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 145 | properties.getProperty("default.foundry.orthography", "opennlp"); |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame^] | 146 | defaultStructureFoundry = |
| 147 | properties.getProperty("default.foundry.structure", "base"); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 148 | |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 149 | // security configuration |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 150 | inactiveTime = TimeUtils.convertTimeToSeconds( |
| 151 | properties.getProperty("security.idleTimeoutDuration", "10M")); |
| 152 | allowMultiLogIn = Boolean |
| 153 | .valueOf(properties.getProperty("security.multipleLogIn")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 154 | |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 155 | loginAttemptNum = Long.parseLong( |
| 156 | properties.getProperty("security.loginAttemptNum", "3")); |
| 157 | loginAttemptTTL = TimeUtils.convertTimeToSeconds( |
| 158 | properties.getProperty("security.authAttemptTTL", "30M")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 159 | |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 160 | loadFactor = Integer.valueOf( |
| 161 | properties.getProperty("security.encryption.loadFactor", "15")); |
| 162 | validationStringLength = Integer.valueOf(properties |
| 163 | .getProperty("security.validation.stringLength", "150")); |
| 164 | validationEmaillength = Integer.valueOf(properties |
| 165 | .getProperty("security.validation.emailLength", "40")); |
| 166 | |
| 167 | sharedSecret = |
| 168 | properties.getProperty("security.sharedSecret", "").getBytes(); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 169 | adminToken = properties.getProperty("security.adminToken"); |
| 170 | |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 171 | longTokenTTL = TimeUtils.convertTimeToSeconds( |
| 172 | properties.getProperty("security.longTokenTTL", "100D")); |
| 173 | tokenTTL = TimeUtils.convertTimeToSeconds( |
| 174 | properties.getProperty("security.tokenTTL", "72H")); |
| 175 | shortTokenTTL = TimeUtils.convertTimeToSeconds( |
| 176 | properties.getProperty("security.shortTokenTTL", "3H")); |
| Michael Hanl | 482f30d | 2015-09-25 12:39:46 +0200 | [diff] [blame] | 177 | |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 178 | // passcodeSaltField = |
| 179 | // properties.getProperty("security.passcode.salt", |
| 180 | // "accountCreation"); |
| margaretha | 339fd2e | 2018-11-13 12:14:53 +0100 | [diff] [blame] | 181 | |
| 182 | setSecureRandomAlgorithm(properties |
| 183 | .getProperty("security.secure.random.algorithm", "SHA1PRNG")); |
| 184 | |
| 185 | setMessageDigestAlgorithm( |
| 186 | properties.getProperty("security.md.algorithm", "MD5")); |
| 187 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 188 | } |
| 189 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 190 | /** |
| 191 | * set properties |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 192 | * |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 193 | * @param props |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 194 | * @throws IOException |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 195 | */ |
| margaretha | 1929596 | 2018-06-26 16:00:47 +0200 | [diff] [blame] | 196 | // public void setProperties (Properties props) throws IOException |
| 197 | // { |
| 198 | // this.load(props); |
| 199 | // } |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 200 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 201 | /** |
| 202 | * properties can be overloaded after spring init |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 203 | * |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 204 | * @param stream |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 205 | * @throws Exception |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 206 | */ |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 207 | public void setPropertiesAsStream (InputStream stream) throws Exception { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 208 | try { |
| Michael Hanl | d6eadd5 | 2015-11-11 18:30:33 +0100 | [diff] [blame] | 209 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 210 | Properties p = new Properties(); |
| 211 | p.load(stream); |
| 212 | this.load(p); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 213 | } |
| 214 | catch (IOException e) { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 215 | e.printStackTrace(); |
| 216 | } |
| 217 | |
| 218 | } |
| 219 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 220 | public BACKENDS chooseBackend (String value) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 221 | if (value == null || value.equals("null")) |
| 222 | return DEFAULT_ENGINE; |
| 223 | else |
| 224 | return Enum.valueOf(BACKENDS.class, value.toUpperCase()); |
| 225 | } |
| 226 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 227 | public enum BACKENDS { |
| 228 | NEO4J, LUCENE |
| 229 | } |
| 230 | |
| 231 | } |