package oauth import ( "fmt" "net/url" "github.com/micro/go-micro/v2/auth/provider" ) // NewProvider returns an initialised oauth provider func NewProvider(opts ...provider.Option) provider.Provider { var options provider.Options for _, o := range opts { o(&options) } return &oauth{options} } type oauth struct { opts provider.Options } func (o *oauth) String() string { return "oauth" } func (o *oauth) Options() provider.Options { return o.opts } func (o *oauth) Endpoint(opts ...provider.EndpointOption) string { var options provider.EndpointOptions for _, o := range opts { o(&options) } params := make(url.Values) params.Add("response_type", "code") if len(options.State) > 0 { params.Add("state", options.State) } if len(options.LoginHint) > 0 { params.Add("login_hint", options.LoginHint) } if clientID := o.opts.ClientID; len(clientID) > 0 { params.Add("client_id", clientID) } if scope := o.opts.Scope; len(scope) > 0 { params.Add("scope", scope) } if redir := o.Redirect(); len(redir) > 0 { params.Add("redirect_uri", redir) } return fmt.Sprintf("%v?%v", o.opts.Endpoint, params.Encode()) } func (o *oauth) Redirect() string { return o.opts.Redirect }