github.com/unclejack/drone@v0.2.1-0.20140918182345-831b034aa33b/pkg/model/settings.go (about) 1 package model 2 3 import ( 4 "errors" 5 "net/url" 6 "strings" 7 ) 8 9 var ( 10 ErrInvalidGitHubTrailingSlash = errors.New("GitHub URL should not have a trailing slash") 11 ErrInvalidSmtpAddress = errors.New("SMTP From Address must be provided") 12 ErrInvalidSmtpPort = errors.New("SMTP Port must be provided") 13 ) 14 15 type Settings struct { 16 ID int64 `meddler:"id,pk"` 17 18 // SMTP settings. 19 SmtpServer string `meddler:"smtp_server"` 20 SmtpPort string `meddler:"smtp_port"` 21 SmtpAddress string `meddler:"smtp_address"` 22 SmtpUsername string `meddler:"smtp_username"` 23 SmtpPassword string `meddler:"smtp_password"` 24 25 // GitHub Consumer key and secret. 26 GitHubKey string `meddler:"github_key"` 27 GitHubSecret string `meddler:"github_secret"` 28 GitHubDomain string `meddler:"github_domain"` 29 GitHubApiUrl string `meddler:"github_apiurl"` 30 31 // Bitbucket Consumer Key and secret. 32 BitbucketKey string `meddler:"bitbucket_key"` 33 BitbucketSecret string `meddler:"bitbucket_secret"` 34 35 // GitLab Domain 36 GitlabDomain string `meddler:"gitlab_domain"` 37 GitlabApiUrl string `meddler:"gitlab_apiurl"` 38 39 // Domain of the server, eg drone.io 40 Domain string `meddler:"hostname"` 41 42 // Scheme of the server, eg https 43 Scheme string `meddler:"scheme"` 44 45 OpenInvitations bool `meddler:"open_invitations"` 46 } 47 48 func (s *Settings) URL() *url.URL { 49 return &url.URL{ 50 Scheme: s.Scheme, 51 Host: s.Domain} 52 } 53 54 // Validate verifies all required fields are correctly populated. 55 func (s *Settings) Validate() error { 56 switch { 57 case strings.HasSuffix(s.GitHubApiUrl, "/"): 58 return ErrInvalidGitHubTrailingSlash 59 case len(s.SmtpServer) != 0 && len(s.SmtpPort) == 0: 60 return ErrInvalidSmtpPort 61 case len(s.SmtpServer) != 0 && len(s.SmtpAddress) == 0: 62 return ErrInvalidSmtpAddress 63 default: 64 return nil 65 } 66 }