klesh opened a new pull request, #4260:
URL: https://github.com/apache/incubator-devlake/pull/4260
### Summary
This PR is a more robust/reasonable/elegant/comprehensive solution for
#4027, #4212.
The Mechanism offers the following aid for connections that require Single
or Multiple Authorizations
** For Connections Support Single Authorization Method **, define the
connection to look like:
```golang
// GitlabConn holds the essential information to connect to the Gitlab API
type GitlabConn struct {
helper.RestConnection `mapstructure:",squash"`
helper.AccessToken `mapstructure:",squash"`
}
// This object conforms to what the frontend currently sends.
// GitlabConnection holds GitlabConn plus ID/Name for database storage
type GitlabConnection struct {
helper.BaseConnection `mapstructure:",squash"`
GitlabConn `mapstructure:",squash"`
}
```
** For Connections Support Multiple Authorization Methods **, define the
connection to look like:
```golang
// JiraConn holds the essential information to connect to the Jira API
type JiraConn struct {
helper.RestConnection `mapstructure:",squash"`
helper.MultiAuth `mapstructure:",squash"`
helper.BasicAuth `mapstructure:",squash"`
helper.AccessToken `mapstructure:",squash"`
}
// SetupAuthentication implements the `IAuthentication` interface by
delegating
// the actual logic to the `MultiAuth` struct to help us write less code
func (jc JiraConn) SetupAuthentication(req *http.Request) errors.Error {
return jc.MultiAuth.SetupAuthenticationForConnection(&jc, req)
}
// JiraConnection holds JiraConn plus ID/Name for database storage
type JiraConnection struct {
helper.BaseConnection `mapstructure:",squash"`
JiraConn `mapstructure:",squash"`
}
```
** Test Connection implementation for both parties be like **:
```golang
// decode
var err errors.Error
var connection models.GitlabConn
if err = api.Decode(input.Body, &connection, vld); err != nil {
return nil, err
}
// test connection
apiClient, err := api.NewApiClientFromConnection(context.TODO(),
basicRes, connection)
if err != nil {
return nil, errors.Convert(err)
}
// TEST the connection with apiClient
```
### Does this close any open issues?
Closes #4027
Closes #4212
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]