diff --git a/gitea/oauth2.go b/gitea/oauth2.go new file mode 100644 index 0000000..8f619e7 --- /dev/null +++ b/gitea/oauth2.go @@ -0,0 +1,65 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package gitea + +import ( + "bytes" + "encoding/json" + "fmt" + "time" +) + +// Oauth2 represents an Oauth2 Application +type Oauth2 struct { + ID int64 `json:"id"` + Name string `json:"name"` + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + RedirectURIs []string `json:"redirect_uris"` + Created time.Time `json:"created"` +} + +// ListOauth2Option for listing Oauth2 Applications +type ListOauth2Option struct { + ListOptions +} + +// CreateOauth2Option required options for creating an Application +type CreateOauth2Option struct { + Name string `json:"name"` + RedirectURIs []string `json:"redirect_uris"` +} + +// CreateOauth2 create an Oauth2 Application and returns a completed Oauth2 object. +func (c *Client) CreateOauth2(opt CreateOauth2Option) (*Oauth2, error) { + if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil { + return nil, e + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, err + } + oauth := new(Oauth2) + return oauth, c.getParsedResponse("POST", "/user/applications/oauth2", jsonHeader, bytes.NewReader(body), oauth) +} + +// ListOauth2 all of your Oauth2 Applications. +func (c *Client) ListOauth2(opt ListOauth2Option) ([]*Oauth2, error) { + if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil { + return nil, e + } + opt.setDefaults() + oauth2s := make([]*Oauth2, 0, opt.PageSize) + return oauth2s, c.getParsedResponse("GET", fmt.Sprintf("/user/applications/oauth2?%s", opt.getURLQuery().Encode()), nil, nil, &oauth2s) +} + +// DeleteOauth2 delete an Oauth2 application by name +func (c *Client) DeleteOauth2(oauth2id int64) error { + if e := c.CheckServerVersionConstraint(">=1.12.0"); e != nil { + return e + } + _, err := c.getResponse("DELETE", fmt.Sprintf("/user/applications/oauth2/%d", oauth2id), nil, nil) + return err +} diff --git a/gitea/oauth2_test.go b/gitea/oauth2_test.go new file mode 100644 index 0000000..c335fad --- /dev/null +++ b/gitea/oauth2_test.go @@ -0,0 +1,32 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package gitea + +import ( + "log" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestOauth2(t *testing.T) { + log.Println("== TestOauth2Application ==") + c := newTestClient() + + user := createTestUser(t, "oauth2_user", c) + c.SetSudo(user.UserName) + + newApp, err := c.CreateOauth2(CreateOauth2Option{Name: "test", RedirectURIs: []string{"http://test/test",}}) + assert.NoError(t, err) + assert.NotNil(t, newApp) + assert.EqualValues(t, "test", newApp.Name) + + a, err := c.ListOauth2(ListOauth2Option{}) + assert.NoError(t, err) + assert.Len(t, a, 1) + assert.EqualValues(t, newApp.Name, a[0].Name) + + assert.NoError(t, c.DeleteOauth2(newApp.ID)) +}