summaryrefslogtreecommitdiffstats
path: root/app/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/config.go')
-rw-r--r--app/config.go98
1 files changed, 9 insertions, 89 deletions
diff --git a/app/config.go b/app/config.go
index b4925e8fb..a2398f9e9 100644
--- a/app/config.go
+++ b/app/config.go
@@ -4,12 +4,7 @@
package app
import (
- "crypto/ecdsa"
- "crypto/elliptic"
"crypto/md5"
- "crypto/rand"
- "crypto/x509"
- "encoding/base64"
"encoding/json"
"fmt"
"runtime/debug"
@@ -121,91 +116,8 @@ func (a *App) InvokeConfigListeners(old, current *model.Config) {
}
}
-// EnsureAsymmetricSigningKey ensures that an asymmetric signing key exists and future calls to
-// AsymmetricSigningKey will always return a valid signing key.
-func (a *App) ensureAsymmetricSigningKey() error {
- if a.asymmetricSigningKey != nil {
- return nil
- }
-
- var key *model.SystemAsymmetricSigningKey
-
- result := <-a.Srv.Store.System().GetByName(model.SYSTEM_ASYMMETRIC_SIGNING_KEY)
- if result.Err == nil {
- if err := json.Unmarshal([]byte(result.Data.(*model.System).Value), &key); err != nil {
- return err
- }
- }
-
- // If we don't already have a key, try to generate one.
- if key == nil {
- newECDSAKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
- if err != nil {
- return err
- }
- newKey := &model.SystemAsymmetricSigningKey{
- ECDSAKey: &model.SystemECDSAKey{
- Curve: "P-256",
- X: newECDSAKey.X,
- Y: newECDSAKey.Y,
- D: newECDSAKey.D,
- },
- }
- system := &model.System{
- Name: model.SYSTEM_ASYMMETRIC_SIGNING_KEY,
- }
- v, err := json.Marshal(newKey)
- if err != nil {
- return err
- }
- system.Value = string(v)
- if result = <-a.Srv.Store.System().Save(system); result.Err == nil {
- // If we were able to save the key, use it, otherwise ignore the error.
- key = newKey
- }
- }
-
- // If we weren't able to save a new key above, another server must have beat us to it. Get the
- // key from the database, and if that fails, error out.
- if key == nil {
- result := <-a.Srv.Store.System().GetByName(model.SYSTEM_ASYMMETRIC_SIGNING_KEY)
- if result.Err != nil {
- return result.Err
- } else if err := json.Unmarshal([]byte(result.Data.(*model.System).Value), &key); err != nil {
- return err
- }
- }
-
- var curve elliptic.Curve
- switch key.ECDSAKey.Curve {
- case "P-256":
- curve = elliptic.P256()
- default:
- return fmt.Errorf("unknown curve: " + key.ECDSAKey.Curve)
- }
- a.asymmetricSigningKey = &ecdsa.PrivateKey{
- PublicKey: ecdsa.PublicKey{
- Curve: curve,
- X: key.ECDSAKey.X,
- Y: key.ECDSAKey.Y,
- },
- D: key.ECDSAKey.D,
- }
- a.regenerateClientConfig()
- return nil
-}
-
-// AsymmetricSigningKey will return a private key that can be used for asymmetric signing.
-func (a *App) AsymmetricSigningKey() *ecdsa.PrivateKey {
- return a.asymmetricSigningKey
-}
-
func (a *App) regenerateClientConfig() {
- a.clientConfig = utils.GenerateClientConfig(a.Config(), a.DiagnosticId(), a.License())
- if key := a.AsymmetricSigningKey(); key != nil {
- der, _ := x509.MarshalPKIXPublicKey(&key.PublicKey)
- a.clientConfig["AsymmetricSigningPublicKey"] = base64.StdEncoding.EncodeToString(der)
- }
+ a.clientConfig = utils.GenerateClientConfig(a.Config(), a.DiagnosticId())
clientConfigJSON, _ := json.Marshal(a.clientConfig)
a.clientConfigHash = fmt.Sprintf("%x", md5.Sum(clientConfigJSON))
}
@@ -254,3 +166,11 @@ func (a *App) Desanitize(cfg *model.Config) {
cfg.SqlSettings.DataSourceSearchReplicas[i] = actual.SqlSettings.DataSourceSearchReplicas[i]
}
}
+
+// License returns the currently active license or nil if the application is unlicensed.
+func (a *App) License() *model.License {
+ if utils.IsLicensed() {
+ return utils.License()
+ }
+ return nil
+}