annotate pkg/config/config.go @ 3104:19fc84a98479

Added "published-config" field to configuration. It's a path to a published JSON file (after login) to give additional parameters to the client. Reached by GET /api/system/config Currently the field "osm-url" is used by the client to determine the URL of the OSM server for the background layer.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 25 Apr 2019 15:31:43 +0200
parents ae678f7cf938
children 6a44a89ffb51
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"
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
20 "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"
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
25 "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
26 "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
27
414
c1047fd04a3a Moved project specific Go packages to new pkg folder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 408
diff changeset
28 "gemma.intevation.de/gemma/pkg/common"
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
29 )
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
30
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
31 // 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
32 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
33
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
34 // 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
35 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
36
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 // 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
38 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
39
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 // 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
41 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
42
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 // 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
44 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
45
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 // 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
47 func DBPassword() string { return viper.GetString("db-password") }
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
48
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
49 // 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
50 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
51
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 // 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
53 // 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
54 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
55
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
56 // 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
57 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
58
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 // 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
60 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
61
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
62 // 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
63 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
64
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 // 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
66 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
67
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
68 // 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
69 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
70
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 // 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
72 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
73
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 // 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
75 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
76
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
77 // 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
78 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
79
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
80 // 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
81 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
82
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 // 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
84 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
85
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
86 // 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
87 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
88
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 // 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
90 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
91
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 // 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
93 // 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
94 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
95
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
96 // 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
97 // 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
98 // 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
99 // 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
100 // 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
101 // 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
102 // 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
103 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
104
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
105 // 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
106 // 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
107 func TmpDir() string { return viper.GetString("tmp-dir") }
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
108
3104
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
109 // 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
110 // 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
111 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
112
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
113 var (
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
114 proxyKeyOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
115 proxyKey []byte
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
116 proxyPrefixOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
117 proxyPrefix string
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
118 externalURLOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
119 externalURL string
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
120 sessionTimeoutOnce sync.Once
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
121 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
122 )
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
123
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
124 // 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
125 // 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
126 // 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
127 // 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
128 // 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
129 // 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
130 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
131 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
132 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
133 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
134 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
135 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
136 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
137 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
138 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
139 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
140 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
141 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
142 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
143 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
144 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
145
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
146 // 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
147 // 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
148 // 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
149 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
150 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
151 if proxyPrefix == "" {
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
152 if proxyPrefix = viper.GetString("proxy-prefix"); proxyPrefix == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
153 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
154 }
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 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
156 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
157 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
158 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
159 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
160
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
161 // 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
162 func ExternalURL() string {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
163 fetchExternal := func() {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
164 if externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
165 if externalURL = viper.GetString("external-url"); externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
166 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
167 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
168 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
169 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
170 externalURLOnce.Do(fetchExternal)
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
171 return externalURL
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
172 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
173
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
174 // 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
175 func SessionTimeout() time.Duration {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
176 fetchTimeout := func() {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
177 if sessionTimeout == 0 {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
178 sessionTimeout = viper.GetDuration("session-timeout")
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
179 if sessionTimeout <= 0 {
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
180 log.Println("warn: non-positive session-timeout configured.")
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
181 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
182 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
183 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
184 sessionTimeoutOnce.Do(fetchTimeout)
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
185 return sessionTimeout
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
186 }
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
187
2906
ae678f7cf938 Removed irritatting parts from config doc strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2901
diff changeset
188 // 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
189 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
190
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
191 // 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
192 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
193 Use: "gemma",
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
194 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
195 }
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
196
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
197 var allowedOrigins = []string{
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
198 // TODO: Fill me!
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
199 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
200
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
201 func init() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
202 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
203 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
204 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
205
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
206 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
207
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
208 str := func(name, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
209 fl.String(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
210 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
211 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
212 strP := func(name, shorthand, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
213 fl.StringP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
214 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
215 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
216 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
217 fl.Uint(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
218 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
219 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
220 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
221 fl.UintP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
222 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
223 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
224 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
225 fl.StringSlice(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
226 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
227 }
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
228 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
229 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
230 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
231 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
232
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
233 strP("db-host", "H", "localhost", "host of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
234 uiP("db-port", "P", 5432, "port of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
235 strP("db-name", "d", "gemma", "name of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
236 str("db-user", "meta_login", "Metamorphic database user")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
237 str("db-password", "", "Metamorphic database user password")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
238 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
239
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
240 strP("sessions", "s", "", "path to the sessions file")
2639
0db742c7813d Make session timeout configurable
Tom Gottfried <tom@intevation.de>
parents: 2181
diff changeset
241 str("session-timeout", "3h", "duration until sessions expire")
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
242
394
f24ed1d570c7 server: add default value for serving "web".
Bernhard Reiter <bernhard@intevation.de>
parents: 386
diff changeset
243 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
244 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
245 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
246
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
247 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
248 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
249 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
250 "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
251 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
252 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
253 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
254
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
255 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
256
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
257 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
258 str("geoserver-user", "admin", "GeoServer user")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
259 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
260 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
261
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
262 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
263 "Defaults to random key.")
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
264 str("proxy-prefix", "", "URL prefix of proxy.\n"+
2901
da1d063ee085 improve cmd/gemma/gemma --help
Bernhard Reiter <bernhard@intevation.de>
parents: 2639
diff changeset
265 "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
266
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
267 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
268 "Defaults to 'http://${host}:${port}'")
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
269
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
270 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
271 "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
272
bd09d6ad4c14 SOAP: Add validating parser (uses 'xmllint') for manual uploads.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1644
diff changeset
273 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
274
19fc84a98479 Added "published-config" field to configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2906
diff changeset
275 str("published-config", "", "path to a config file served to client.")
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
276 }
958
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
277
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
278 var (
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
279 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
280 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
281 )
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
282
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
283 // 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
284 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
285 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
286 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
287 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
288 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
289 }
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
290
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
291 // 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
292 // 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
293 // 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
294 // 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
295 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
296 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
297 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
298 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
299 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
300 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
301 }
325
c23eb0f34e39 Added CORS support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 302
diff changeset
302
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
303 func initConfig() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
304 // 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
305 if configFile != "" {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
306 // 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
307 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
308 } else {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
309 // 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
310 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
311 if err != nil {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
312 log.Fatalf("error: %v\n", err)
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
313 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
314
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
315 // 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
316 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
317 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
318 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
319 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
320 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
321 // 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
322 return
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
323 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
324 log.Fatalf("Can't read config: %v\n", err)
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
325 }
28
714787accd26 Fetch database connection string parts from configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326 }