github.com/annwntech/go-micro/v2@v2.9.5/auth/provider/oauth/oauth.go (about) 1 package oauth 2 3 import ( 4 "fmt" 5 "net/url" 6 7 "github.com/annwntech/go-micro/v2/auth/provider" 8 ) 9 10 // NewProvider returns an initialised oauth provider 11 func NewProvider(opts ...provider.Option) provider.Provider { 12 var options provider.Options 13 for _, o := range opts { 14 o(&options) 15 } 16 return &oauth{options} 17 } 18 19 type oauth struct { 20 opts provider.Options 21 } 22 23 func (o *oauth) String() string { 24 return "oauth" 25 } 26 27 func (o *oauth) Options() provider.Options { 28 return o.opts 29 } 30 31 func (o *oauth) Endpoint(opts ...provider.EndpointOption) string { 32 var options provider.EndpointOptions 33 for _, o := range opts { 34 o(&options) 35 } 36 37 params := make(url.Values) 38 params.Add("response_type", "code") 39 40 if len(options.State) > 0 { 41 params.Add("state", options.State) 42 } 43 44 if len(options.LoginHint) > 0 { 45 params.Add("login_hint", options.LoginHint) 46 } 47 48 if clientID := o.opts.ClientID; len(clientID) > 0 { 49 params.Add("client_id", clientID) 50 } 51 52 if scope := o.opts.Scope; len(scope) > 0 { 53 params.Add("scope", scope) 54 } 55 56 if redir := o.Redirect(); len(redir) > 0 { 57 params.Add("redirect_uri", redir) 58 } 59 60 return fmt.Sprintf("%v?%v", o.opts.Endpoint, params.Encode()) 61 } 62 63 func (o *oauth) Redirect() string { 64 return o.opts.Redirect 65 }