git.iko.soy/typeable/oauth2-proxy
on v1.0 help sign in
72 lines 2.6 kB history raw
1package main
3import (
4 "errors"
5 "fmt"
6 "net/url"
7 "time"
8)
10// Configuration Options that can be set by Command Line Flag, or Config File
11type Options struct {
12 HttpAddress string `flag:"http-address" cfg:"http_address"`
13 RedirectUrl string `flag:"redirect-url" cfg:"redirect_url"`
14 ClientID string `flag:"client-id" cfg:"client_id" env:"GOOGLE_AUTH_PROXY_CLIENT_ID"`
15 ClientSecret string `flag:"client-secret" cfg:"client_secret" env:"GOOGLE_AUTH_PROXY_CLIENT_SECRET"`
16 PassBasicAuth bool `flag:"pass-basic-auth" cfg:"pass_basic_auth"`
17 HtpasswdFile string `flag:"htpasswd-file" cfg:"htpasswd_file"`
18 CookieSecret string `flag:"cookie-secret" cfg:"cookie_secret" env:"GOOGLE_AUTH_PROXY_COOKIE_SECRET"`
19 CookieDomain string `flag:"cookie-domain" cfg:"cookie_domain" env:"GOOGLE_AUTH_PROXY_COOKIE_DOMAIN"`
20 CookieExpire time.Duration `flag:"cookie-expire" cfg:"cookie_expire" env:"GOOGLE_AUTH_PROXY_COOKIE_EXPIRE"`
21 CookieHttpsOnly bool `flag:"cookie-https-only" cfg:"cookie_https_only"`
22 AuthenticatedEmailsFile string `flag:"authenticated-emails-file" cfg:"authenticated_emails_file"`
23 GoogleAppsDomains []string `flag:"google-apps-domain" cfg:"google_apps_domains"`
24 Upstreams []string `flag:"upstream" cfg:"upstreams"`
26 // internal values that are set after config validation
27 redirectUrl *url.URL
28 proxyUrls []*url.URL
31func NewOptions() *Options {
32 return &Options{
33 HttpAddress: "127.0.0.1:4180",
34 CookieHttpsOnly: true,
35 PassBasicAuth: true,
36 CookieExpire: time.Duration(168) * time.Hour,
37 }
40func (o *Options) Validate() error {
41 if len(o.Upstreams) < 1 {
42 return errors.New("missing setting: upstream")
43 }
44 if o.CookieSecret == "" {
45 errors.New("missing setting: cookie-secret")
46 }
47 if o.ClientID == "" {
48 return errors.New("missing setting: client-id")
49 }
50 if o.ClientSecret == "" {
51 return errors.New("missing setting: client-secret")
52 }
54 redirectUrl, err := url.Parse(o.RedirectUrl)
55 if err != nil {
56 return fmt.Errorf("error parsing redirect-url=%q %s", o.RedirectUrl, err)
57 }
58 o.redirectUrl = redirectUrl
60 for _, u := range o.Upstreams {
61 upstreamUrl, err := url.Parse(u)
62 if err != nil {
63 return fmt.Errorf("error parsing upstream=%q %s", upstreamUrl, err)
64 }
65 if upstreamUrl.Path == "" {
66 upstreamUrl.Path = "/"
67 }
68 o.proxyUrls = append(o.proxyUrls, upstreamUrl)
69 }
71 return nil