diff -r 8f478162d991 -r 05c40b36d3b2 vendor/github.com/McKael/madon/v3/app.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/github.com/McKael/madon/v3/app.go Sat Feb 04 12:58:35 2023 +0100 @@ -0,0 +1,99 @@ +/* +Copyright 2017-2018 Mikael Berthe +Copyright 2017 Ollivier Robert + +Licensed under the MIT license. Please see the LICENSE file is this directory. +*/ + +package madon + +import ( + "net/url" + "strings" + + "github.com/pkg/errors" + "github.com/sendgrid/rest" +) + +type registerApp struct { + ID int64 `json:"id,string"` + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// buildInstanceURL creates the URL from the instance name or cleans up the +// provided URL +func buildInstanceURL(instanceName string) (string, error) { + if instanceName == "" { + return "", errors.New("no instance provided") + } + + instanceURL := instanceName + if !strings.Contains(instanceURL, "/") { + instanceURL = "https://" + instanceName + } + + u, err := url.ParseRequestURI(instanceURL) + if err != nil { + return "", err + } + + u.Path = "" + u.RawPath = "" + u.RawQuery = "" + u.Fragment = "" + return u.String(), nil +} + +// NewApp registers a new application with a given instance +func NewApp(name, website string, scopes []string, redirectURI, instanceName string) (mc *Client, err error) { + instanceURL, err := buildInstanceURL(instanceName) + if err != nil { + return nil, err + } + + mc = &Client{ + Name: name, + InstanceURL: instanceURL, + APIBase: instanceURL + currentAPIPath, + } + + params := make(apiCallParams) + params["client_name"] = name + if website != "" { + params["website"] = website + } + params["scopes"] = strings.Join(scopes, " ") + if redirectURI != "" { + params["redirect_uris"] = redirectURI + } else { + params["redirect_uris"] = NoRedirect + } + + var app registerApp + if err := mc.apiCall("v1/apps", rest.Post, params, nil, nil, &app); err != nil { + return nil, err + } + + mc.ID = app.ClientID + mc.Secret = app.ClientSecret + + return +} + +// RestoreApp recreates an application client with existing secrets +func RestoreApp(name, instanceName, appID, appSecret string, userToken *UserToken) (mc *Client, err error) { + instanceURL, err := buildInstanceURL(instanceName) + if err != nil { + return nil, err + } + + return &Client{ + Name: name, + InstanceURL: instanceURL, + APIBase: instanceURL + currentAPIPath, + ID: appID, + Secret: appSecret, + UserToken: userToken, + }, nil +}