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  }