annotate pkg/config/config.go @ 5670:b75d0b303328

Various fixes and improvements of gauges import: - Allow update of erased data (and thereby set erased to false) - Fix source_organization to work with ERDMS2 - Give ISRS of new and updated gauges in summary - Fixed reference of null pointers if revlevels are missing - Fixed reference of null pointer on update errors - Added ISRS to reference_code warning
author Sascha Wilde <wilde@sha-bang.de>
date Fri, 08 Dec 2023 17:29:56 +0100
parents a826d84485c8
children 2dd155cc95ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
6 //
2901
da1d063ee085 improve cmd/gemma/gemma --help
Bernhard Reiter <bernhard@intevation.de>
parents: 2639
diff changeset
7 // Copyright (C) 2018, 2019 by via donau
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
1317
5443f5c9154c Added missing authors names in Go files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
13 // * Bernhard E. Reiter <bernhard.reiter@intevation.de>
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
14
28
714787accd26 Fetch database connection string parts from configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 package config
714787accd26 Fetch database connection string parts from configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
17 import (
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
18 "crypto/sha256"
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
19 "fmt"
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
20 lg "log"
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
21 "sync"
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
22 "time"
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
23
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
24 homedir "github.com/mitchellh/go-homedir"
3161
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
25
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
26 "github.com/spf13/cobra"
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
27 "github.com/spf13/viper"
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
28
414
c1047fd04a3a Moved project specific Go packages to new pkg folder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 408
diff changeset
29 "gemma.intevation.de/gemma/pkg/common"
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
30 "gemma.intevation.de/gemma/pkg/log"
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
31 )
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
32
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
33 // This is not part of the persistent config.
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
34 var configFile string
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
35
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
36 // DBHost is the hostname of the database.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
37 func DBHost() string { return viper.GetString("db-host") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
38
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
39 // DBPort is the port of the database.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
40 func DBPort() uint { return uint(viper.GetInt32("db-port")) }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
41
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
42 // DBName is the name of the database.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
43 func DBName() string { return viper.GetString("db-name") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
44
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
45 // DBUser is the name of the user to connect to the database.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
46 func DBUser() string { return viper.GetString("db-user") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
47
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
48 // DBPassword is the password to connect to the database.
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
49 func DBPassword() string { return viper.GetString("db-password") }
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
50
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
51 // DBSSLMode selects the SSL mode to encrypt the connection to the database.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
52 func DBSSLMode() string { return viper.GetString("db-ssl") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
53
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
54 // SessionStore is the path to the session store.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
55 // If empty the session store is kept in memory only.
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
56 func SessionStore() string { return viper.GetString("sessions") }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
57
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
58 // Web is the root folder of the served web content.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
59 func Web() string { return viper.GetString("web") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
60
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
61 // WebHost is the host to bind the web server to.
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
62 func WebHost() string { return viper.GetString("host") }
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
63
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
64 // WebPort is the port to bind the web server to.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
65 func WebPort() uint { return uint(viper.GetInt32("port")) }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
66
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
67 // MailHost is the server of the SMTP server.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
68 func MailHost() string { return viper.GetString("mail-host") }
386
999f4f83a072 Configure GeoServer via REST-API. TODO: Configure layers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 385
diff changeset
69
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
70 // MailPort is the port of the SMTP server.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
71 func MailPort() uint { return uint(viper.GetInt32("mail-port")) }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
72
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
73 // MailUser is the user to connect to the SMTP server.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
74 func MailUser() string { return viper.GetString("mail-user") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
75
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
76 // MailPassword is the password of the user to connect to the SMTP server.
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
77 func MailPassword() string { return viper.GetString("mail-password") }
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
78
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
79 // MailFrom is the sender in the 'from' header in mails send.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
80 func MailFrom() string { return viper.GetString("mail-from") }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
81
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
82 // MailHelo is the helo message send to the SMTP server.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
83 func MailHelo() string { return viper.GetString("mail-helo") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
84
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
85 // AllowedOrigins is a list of allowed host for CORS headers.
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
86 func AllowedOrigins() []string { return viper.GetStringSlice("allowed-origins") }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
87
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
88 // GeoServerURL is the URL of the GeoServer used by gemma to serve map data.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
89 func GeoServerURL() string { return viper.GetString("geoserver-url") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
90
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
91 // GeoServerUser is the adminstrative user to connect to the GeoServer.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
92 func GeoServerUser() string { return viper.GetString("geoserver-user") }
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
93
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
94 // GeoServerPassword is the password of the adminstrative user
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
95 // to connect to the GeoServer.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
96 func GeoServerPassword() string { return viper.GetString("geoserver-password") }
335
bd292a554b6e Made gemma a WFS proxy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 332
diff changeset
97
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
98 // GeoServerClean is a flag to indicate that the GeoServer setup for
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
99 // gemma should be freshly created at boot time.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
100 // This is useful in case of gemma update.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
101 // If false the only missing parts are added to the GeoServer setup.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
102 // This should be the default mode when running gemma after an update
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
103 // as it reduces the pressure on the GeoServer and enables faster
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
104 // rebooting.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
105 func GeoServerClean() bool { return viper.GetBool("geoserver-clean") }
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
106
4624
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
107 // GeoServerStartupSQL can be used to add SQL commands to GeoServers database
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
108 // session start script. See
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
109 // https://docs.geoserver.org/stable/en/user/data/database/sqlsession.html
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
110 // Note that the commands will be executed as the user configured as 'db-user'.
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
111 func GeoServerStartupSQL() string {
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
112 return viper.GetString("geoserver-startup-sql")
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
113 }
209b10f7bb2c Add config for GeoServer database session startup SQL
Tom Gottfried <tom@intevation.de>
parents: 3582
diff changeset
114
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
115 // TmpDir is the path where to store temporary files.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
116 // If left empty the system default for temporary files is used.
958
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
117 func TmpDir() string { return viper.GetString("tmp-dir") }
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
118
3104
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
119 // PublishedConfig is a name of a JSON file where extra configuration is stored
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
120 // to be served to to the web client.
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
121 func PublishedConfig() string { return viper.GetString("published-config") }
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
122
3161
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
123 // SOAPTimeout is the timeout till a SOAP request is canceled.
3169
9128fdeba3bc Consmetics: Adjusted config.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3162
diff changeset
124 func SOAPTimeout() time.Duration { return viper.GetDuration("soap-timeout") }
3161
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
125
5321
0919946f624b Added a report controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4624
diff changeset
126 // ReportPath is a path where report templates are stored.
0919946f624b Added a report controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4624
diff changeset
127 func ReportPath() string { return viper.GetString("report-path") }
0919946f624b Added a report controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4624
diff changeset
128
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
129 // LogFile is the path to the log file.
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
130 func LogFile() string { return viper.GetString("log-file") }
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
131
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
132 // LogLevel is the log level of the application.
5601
1222b777f51f Made golint finally happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
133 func LogLevel() log.Level { return log.ParseLogLevel(viper.GetString("log-level")) }
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
134
5610
a826d84485c8 Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
135 // TokenURL is the ERDMS token service URL.
a826d84485c8 Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
136 func TokenURL() string { return viper.GetString("token-url") }
a826d84485c8 Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
137
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
138 var (
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
139 proxyKeyOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
140 proxyKey []byte
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
141 proxyPrefixOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
142 proxyPrefix string
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
143 externalURLOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
144 externalURL string
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
145 sessionTimeoutOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
146 sessionTimeout time.Duration
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
147 )
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
148
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
149 // ProxyKey is a crytographic key to sign the URLs generated by the proxy.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
150 // Use this to ensure that only known URLs are reachable over the proxy.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
151 // If left blank a random key is generated a gemma boot time.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
152 // Setting this value in the configuration will allow browsing proxy
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
153 // generated URL across gemma reboot.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
154 // Use a strong secret key here (like pwgen -s 20).
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
155 func ProxyKey() []byte {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
156 fetchKey := func() {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
157 if proxyKey == nil {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
158 key := []byte(viper.GetString("proxy-key"))
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
159 if len(key) == 0 {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
160 key = common.GenerateRandomKey(64)
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
161 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
162 hash := sha256.New()
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
163 hash.Write(key)
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
164 proxyKey = hash.Sum(nil)
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
165 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
166 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
167 proxyKeyOnce.Do(fetchKey)
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
168 return proxyKey
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
169 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
170
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
171 // ProxyPrefix is the prefix used in generated URLs by the proxy.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
172 // You may need to set this if you run gemma behind a proxy
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
173 // on a specific domain.
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
174 func ProxyPrefix() string {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
175 fetchPrefix := func() {
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
176 if proxyPrefix == "" {
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
177 if proxyPrefix = viper.GetString("proxy-prefix"); proxyPrefix == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
178 proxyPrefix = fmt.Sprintf("http://%s:%d", WebHost(), WebPort())
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
179 }
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
180 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
181 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
182 proxyPrefixOnce.Do(fetchPrefix)
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
183 return proxyPrefix
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
184 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
185
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
186 // ExternalURL is the URL to find this server from the outside.
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
187 func ExternalURL() string {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
188 fetchExternal := func() {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
189 if externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
190 if externalURL = viper.GetString("external-url"); externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
191 externalURL = fmt.Sprintf("http://%s:%d", WebHost(), WebPort())
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
192 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
193 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
194 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
195 externalURLOnce.Do(fetchExternal)
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
196 return externalURL
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
197 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
198
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
199 // SessionTimeout is the duration until a session expires if not renewed
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
200 func SessionTimeout() time.Duration {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
201 fetchTimeout := func() {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
202 if sessionTimeout == 0 {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
203 sessionTimeout = viper.GetDuration("session-timeout")
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
204 if sessionTimeout <= 0 {
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
205 lg.Println("warn: non-positive session-timeout configured.")
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
206 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
207 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
208 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
209 sessionTimeoutOnce.Do(fetchTimeout)
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
210 return sessionTimeout
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
211 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
212
2906
ae678f7cf938 Removed irritatting parts from config doc strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2901
diff changeset
213 // SchemaDirs are the root directories where to find schema files.
2181
bd09d6ad4c14 SOAP: Add validating parser (uses 'xmllint') for manual uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1644
diff changeset
214 func SchemaDirs() string { return viper.GetString("schema-dirs") }
bd09d6ad4c14 SOAP: Add validating parser (uses 'xmllint') for manual uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1644
diff changeset
215
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
216 // RootCmd is cobra command to be bound th the cobra/viper infrastructure.
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
217 var RootCmd = &cobra.Command{
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
218 Use: "gemma",
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
219 Short: "gemma is a server for waterway monitoring and management",
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
220 }
119
29e56c342c9f Added first middleware for JWT token extraction. TODO: Add second one to check against logged in users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 28
diff changeset
221
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
222 var allowedOrigins = []string{
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
223 // TODO: Fill me!
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
224 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
225
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
226 func init() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
227 cobra.OnInitialize(initConfig)
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
228 fl := RootCmd.PersistentFlags()
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
229 fl.StringVarP(&configFile, "config", "c", "", "config file (default is $HOME/.gemma.toml)")
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
230
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
231 vbind := func(name string) { viper.BindPFlag(name, fl.Lookup(name)) }
302
0777aa6de45b Password reset. Part I
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 221
diff changeset
232
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
233 str := func(name, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
234 fl.String(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
235 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
236 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
237 strP := func(name, shorthand, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
238 fl.StringP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
239 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
240 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
241 ui := func(name string, value uint, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
242 fl.Uint(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
243 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
244 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
245 uiP := func(name, shorthand string, value uint, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
246 fl.UintP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
247 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
248 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
249 strSl := func(name string, value []string, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
250 fl.StringSlice(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
251 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
252 }
874
da526b58c9c4 Added a flag geoserver-clean to force deletion of the gemma workspace before configuring the GeoServer again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 517
diff changeset
253 bl := func(name string, value bool, usage string) {
da526b58c9c4 Added a flag geoserver-clean to force deletion of the gemma workspace before configuring the GeoServer again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 517
diff changeset
254 fl.Bool(name, value, usage)
da526b58c9c4 Added a flag geoserver-clean to force deletion of the gemma workspace before configuring the GeoServer again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 517
diff changeset
255 vbind(name)
da526b58c9c4 Added a flag geoserver-clean to force deletion of the gemma workspace before configuring the GeoServer again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 517
diff changeset
256 }
3161
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
257 d := func(name string, value time.Duration, usage string) {
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
258 fl.Duration(name, value, usage)
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
259 vbind(name)
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
260 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
261
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
262 strP("db-host", "H", "localhost", "host of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
263 uiP("db-port", "P", 5432, "port of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
264 strP("db-name", "d", "gemma", "name of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
265 str("db-user", "meta_login", "Metamorphic database user")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
266 str("db-password", "", "Metamorphic database user password")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
267 strP("db-ssl", "S", "prefer", "SSL mode of the database")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
268
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
269 strP("sessions", "s", "", "path to the sessions file")
3162
659549608644 Config: Fixed type of session timeout (its a duration now ... as intended).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3161
diff changeset
270 d("session-timeout", 3*time.Hour, "duration until sessions expire")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
271
394
f24ed1d570c7 server: add default value for serving "web".
Bernhard Reiter <bernhard@intevation.de>
parents: 386
diff changeset
272 strP("web", "w", "./web", "path to the web files")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
273 strP("host", "o", "localhost", "host of the web app")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
274 uiP("port", "p", 8000, "port of the web app")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
275
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
276 str("mail-host", "localhost", "server to send mail with")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
277 ui("mail-port", 465, "port of server to send mail with")
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
278 str("mail-user", "gemma", "user to authenticate against mail-host.\n"+
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
279 "Leave empty for trying to send without auth.")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
280 str("mail-password", "", "password of user to send mail with")
489
8f3f7577fbe7 proxy: fix minor typo in default for --mail-from
Bernhard Reiter <bernhard@intevation.de>
parents: 449
diff changeset
281 str("mail-from", "noreply@localhost", "from line of mails")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
282 str("mail-helo", "localhost", "name of server to send mail from.")
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
283
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
284 strSl("allowed-origins", allowedOrigins, "allow access for remote origins")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
285
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
286 str("geoserver-url", "http://localhost:8080/geoserver", "URL to GeoServer")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
287 str("geoserver-user", "admin", "GeoServer user")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
288 str("geoserver-password", "geoserver", "GeoServer password")
874
da526b58c9c4 Added a flag geoserver-clean to force deletion of the gemma workspace before configuring the GeoServer again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 517
diff changeset
289 bl("geoserver-clean", false, "Clean GeoServer setup")
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
290
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
291 str("proxy-key", "", "signing key for proxy URLs.\n"+
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
292 "Defaults to random key.")
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
293 str("proxy-prefix", "", "URL prefix of proxy.\n"+
2901
da1d063ee085 improve cmd/gemma/gemma --help
Bernhard Reiter <bernhard@intevation.de>
parents: 2639
diff changeset
294 "Defaults to 'http://${host}:${port}'")
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
295
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
296 str("external-url", "", "URL to find the server from the outside.\n"+
2901
da1d063ee085 improve cmd/gemma/gemma --help
Bernhard Reiter <bernhard@intevation.de>
parents: 2639
diff changeset
297 "Defaults to 'http://${host}:${port}'")
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
298
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
299 str("tmp-dir", "", "Temp directory of gemma server.\n"+
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
300 "Defaults to system temp directory.")
2181
bd09d6ad4c14 SOAP: Add validating parser (uses 'xmllint') for manual uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1644
diff changeset
301
bd09d6ad4c14 SOAP: Add validating parser (uses 'xmllint') for manual uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1644
diff changeset
302 str("schema-dirs", ".", "Directories to find XSD schema files in (recursive).")
3104
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
303
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
304 str("published-config", "", "path to a config file served to client.")
3161
6a44a89ffb51 SOAP: Added a globally configurable timeout (default 1min) till a SOAP request is canceled.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3104
diff changeset
305
5321
0919946f624b Added a report controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4624
diff changeset
306 str("report-path", "", "path to a report templates.")
0919946f624b Added a report controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4624
diff changeset
307
3582
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3169
diff changeset
308 d("soap-timeout", 3*time.Minute, "Timeout till a SOAP request is canceled.")
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
309
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
310 str("log-file", "", "path to a file to log to.")
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
311 str("log-level", log.InfoLogLevel.String(), "path to a file to log to.")
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
312
5610
a826d84485c8 Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
313 str("token-url", "", "URL to the ERDMS token server.")
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
314 }
958
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
315
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
316 var (
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
317 configCond = sync.NewCond(new(sync.Mutex))
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
318 configReady bool
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
319 )
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
320
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
321 // Ready tells if the configuration is ready to use..
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
322 func Ready() {
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
323 configCond.L.Lock()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
324 defer configCond.L.Unlock()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
325 configReady = true
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
326 configCond.Broadcast()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
327 }
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
328
1366
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
329 // WaitReady blocks until the configuration is ready to use.
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
330 // Call this if you have a go routine that needs configuration
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
331 // support. This guarantees that the initialization is done
a25a4d4a3e6e Backend: Added the internal api documentation of the config mechanism of the gemma server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1334
diff changeset
332 // before accessing the configuration data.
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
333 func WaitReady() {
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
334 configCond.L.Lock()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
335 defer configCond.L.Unlock()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
336 for !configReady {
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
337 configCond.Wait()
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
338 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
339 }
325
c23eb0f34e39 Added CORS support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 302
diff changeset
340
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
341 func initConfig() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
342 // Don't forget to read config either from cfgFile or from home directory!
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
343 if configFile != "" {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
344 // Use config file from the flag.
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
345 viper.SetConfigFile(configFile)
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
346 } else {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
347 // Find home directory.
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
348 home, err := homedir.Dir()
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
349 if err != nil {
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
350 lg.Fatalf("error: %v\n", err)
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
351 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
352
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
353 // Search config in home directory with name ".cobra" (without extension).
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
354 viper.AddConfigPath(home)
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
355 viper.SetConfigName(".gemma")
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
356 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
357 if err := viper.ReadInConfig(); err != nil {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
358 if _, ok := err.(viper.ConfigFileNotFoundError); ok && configFile == "" {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
359 // Don't bother if not found.
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
360 return
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
361 }
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5321
diff changeset
362 lg.Fatalf("Can't read config: %v\n", err)
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
363 }
28
714787accd26 Fetch database connection string parts from configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364 }