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  }