-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathmain.go
More file actions
103 lines (83 loc) · 2.84 KB
/
Copy pathmain.go
File metadata and controls
103 lines (83 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package config
import (
"encoding/json"
"strings"
"github.com/mattermost/mattermost/server/public/plugin"
"github.com/pkg/errors"
"go.uber.org/atomic"
)
const (
HeaderMattermostUserID = "Mattermost-User-Id"
)
var (
config atomic.Value
Mattermost plugin.API
BotUserID string
)
type Configuration struct {
Secret string `json:"secret"`
EncryptionKey string `json:"encryptionkey"` // The encryption key used to encrypt tokens
AdminAPIToken string `json:"adminapitoken"` // API token from Confluence Data Center
ConfluenceOAuthClientID string `json:"confluenceoauthclientid"`
ConfluenceOAuthClientSecret string `json:"confluenceoauthclientsecret"`
ConfluenceURL string `json:"confluenceurl"`
ServerVersionGreaterthan9 bool `json:"serverversiongreaterthan9"`
// IsCloud is set by the install-cloud wizard. Determines whether
// /confluence connect runs against Atlassian's 3LO endpoints or the
// configured Server's local OAuth endpoints.
IsCloud bool `json:"iscloud"`
ForgeSharedSecret string `json:"forgesharedsecret"`
ForgeDrainURL string `json:"forgedrainurl"`
ForgeResetURL string `json:"forgereseturl"`
ForgeRegisterURL string `json:"forgeregisterurl"`
ForgeInstallURL string `json:"forgeinstallurl"`
}
func (c *Configuration) GetForgeInstallURL() string {
return strings.TrimSpace(c.ForgeInstallURL)
}
func GetConfig() *Configuration {
return config.Load().(*Configuration)
}
func SetConfig(c *Configuration) {
config.Store(c)
}
func (c *Configuration) ProcessConfiguration() error {
c.Secret = strings.TrimSpace(c.Secret)
return nil
}
func (c *Configuration) IsValid() error {
if len(c.Secret) != 32 {
return errors.New("please provide a valid 32-character Webhook Secret")
}
if len(c.EncryptionKey) != 32 {
return errors.New("please provide a valid 32-character Encryption Key")
}
if c.AdminAPIToken != "" && len(c.AdminAPIToken) < 32 {
return errors.New("please provide a valid Admin API Token with at least 32 characters")
}
return nil
}
func (c *Configuration) Sanitize() {
// Ensure ConfluenceURL does not have trailing slashes by trimming any '/'
c.ConfluenceURL = strings.TrimRight(c.ConfluenceURL, "/")
c.ConfluenceOAuthClientID = strings.TrimSpace(c.ConfluenceOAuthClientID)
c.ConfluenceOAuthClientSecret = strings.TrimSpace(c.ConfluenceOAuthClientSecret)
}
func (c *Configuration) IsOAuthConfigured() bool {
return (c.ConfluenceOAuthClientID != "" && c.ConfluenceOAuthClientSecret != "")
}
func (c *Configuration) ToMap() (map[string]interface{}, error) {
var out map[string]interface{}
data, err := json.Marshal(c)
if err != nil {
return nil, err
}
err = json.Unmarshal(data, &out)
if err != nil {
return nil, err
}
return out, nil
}
func (c *Configuration) GetConfluenceBaseURL() string {
return c.ConfluenceURL
}