annotate pkg/config/config.go @ 1644:eadf84bb0e98

New config variable 'external-url'. Deep inside the import queue we don't known the URL we find the server at. We don't have any HTTP request we can derive this information wrong so it needs to be configured. Defaults to http://${web-host}:${web-port} .
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 20 Dec 2018 14:39:23 +0100
parents a25a4d4a3e6e
children bd09d6ad4c14
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 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1000
diff changeset
7 // Copyright (C) 2018 by via donau
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"
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
22
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
23 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
24 "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
25 "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
26
414
c1047fd04a3a Moved project specific Go packages to new pkg folder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 408
diff changeset
27 "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
28 )
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 // 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
31 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
32
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
33 // 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
34 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
35
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 // 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
37 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
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 // 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
40 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
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 // 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
43 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
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 // 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
46 func DBPassword() string { return viper.GetString("db-password") }
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
47
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
48 // 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
49 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
50
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 // 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
52 // 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
53 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
54
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
55 // 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
56 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
57
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 // 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
59 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
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 // 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
62 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
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 // 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
65 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
66
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
67 // 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
68 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
69
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 // 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
71 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
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 // 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
74 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
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 // 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
77 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
78
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
79 // 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
80 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
81
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 // 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
83 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
84
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
85 // 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
86 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
87
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 // 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
89 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
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 // 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
92 // 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
93 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
94
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
95 // 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
96 // 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
97 // 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
98 // 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
99 // 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
100 // 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
101 // 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
102 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
103
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
104 // 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
105 // 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
106 func TmpDir() string { return viper.GetString("tmp-dir") }
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
107
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
108 var (
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
109 proxyKeyOnce sync.Once
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
110 proxyKey []byte
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
111 proxyPrefixOnce sync.Once
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
112 proxyPrefix string
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
113 externalURLOnce sync.Once
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
114 externalURL string
408
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
115 )
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
116
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
117 // 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
118 // 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
119 // 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
120 // 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
121 // 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
122 // 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
123 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
124 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
125 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
126 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
127 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
128 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
129 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
130 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
131 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
132 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
133 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
134 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
135 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
136 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
137 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
138
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
139 // 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
140 // It defauls to http://${WebHost}:${WebPort}".
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
141 // 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
142 // 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
143 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
144 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
145 if proxyPrefix == "" {
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
146 if proxyPrefix = viper.GetString("proxy-prefix"); proxyPrefix == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
147 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
148 }
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 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
150 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
151 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
152 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
153 }
ac23905e64b1 Improve WFS proxy a lot. It now generates signed re-writings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 396
diff changeset
154
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
155 // 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
156 // It defauls to http://${WebHost}:${WebPort}".
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
157 func ExternalURL() string {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
158 fetchExternal := func() {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
159 if externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
160 if externalURL = viper.GetString("external-url"); externalURL == "" {
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
161 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
162 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
163 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
164 }
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
165 externalURLOnce.Do(fetchExternal)
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
166 return externalURL
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
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
169 // 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
170 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
171 Use: "gemma",
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
172 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
173 }
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
174
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
175 var allowedOrigins = []string{
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
176 // TODO: Fill me!
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
177 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
178
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
179 func init() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
180 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
181 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
182 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
183
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
184 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
185
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
186 str := func(name, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
187 fl.String(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
188 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
189 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
190 strP := func(name, shorthand, value, usage string) {
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
191 fl.StringP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
192 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
193 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
194 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
195 fl.Uint(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
196 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
197 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
198 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
199 fl.UintP(name, shorthand, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
200 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
201 }
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
202 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
203 fl.StringSlice(name, value, usage)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
204 vbind(name)
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
205 }
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
206 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
207 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
208 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
209 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
210
517
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
211 strP("db-host", "H", "localhost", "host of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
212 uiP("db-port", "P", 5432, "port of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
213 strP("db-name", "d", "gemma", "name of the database")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
214 str("db-user", "meta_login", "Metamorphic database user")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
215 str("db-password", "", "Metamorphic database user password")
7e45aaec7081 Consolidate configuration parameters.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 496
diff changeset
216 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
217
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
218 strP("sessions", "s", "", "path to the sessions file")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
219
394
f24ed1d570c7 server: add default value for serving "web".
Bernhard Reiter <bernhard@intevation.de>
parents: 386
diff changeset
220 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
221 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
222 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
223
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
224 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
225 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
226 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
227 "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
228 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
229 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
230 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
231
385
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
232 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
233
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
234 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
235 str("geoserver-user", "admin", "GeoServer user")
3cfab707f909 Added config parameters for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 338
diff changeset
236 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
237 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
238
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
239 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
240 "Defaults to random key.")
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
241 str("proxy-prefix", "", "URL prefix of proxy.\n"+
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
242 "Defaults to 'http://${web-host}:${web-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
243
1644
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
244 str("external-url", "", "URL to find the server from the outside.\n"+
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
245 "Defaults to 'http://${web-host}:${web-port}'")
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
246
eadf84bb0e98 New config variable 'external-url'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1366
diff changeset
247 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
248 "Defaults to system temp directory.")
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
249 }
958
2818ad6c7d32 Started with import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 874
diff changeset
250
1000
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
251 var (
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
252 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
253 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
254 )
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
255
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
256 // 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
257 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
258 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
259 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
260 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
261 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
262 }
14425e35e3c2 Wait with start of import queue until configuration is fully loaded.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 958
diff changeset
263
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
264 // 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
265 // 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
266 // 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
267 // 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
268 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
269 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
270 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
271 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
272 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
273 }
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
274 }
325
c23eb0f34e39 Added CORS support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 302
diff changeset
275
332
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
276 func initConfig() {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
277 // 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
278 if configFile != "" {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
279 // 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
280 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
281 } else {
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
282 // 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
283 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
284 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
285 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
286 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
287
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
288 // 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
289 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
290 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
291 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
292 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
293 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
294 // 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
295 return
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
296 }
394fafeb4052 Use viper as config storage (I don't like it).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 325
diff changeset
297 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
298 }
28
714787accd26 Fetch database connection string parts from configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
299 }