| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | // Copyright 2014 The Gogs 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 userimport (	gocontext "context"	"net/http"	api "github.com/gogs/go-gogs-client"	"gopkg.in/macaron.v1"	"gogs.io/gogs/internal/context"	"gogs.io/gogs/internal/database")// AccessTokensHandler is the handler for users access tokens API endpoints.type AccessTokensHandler struct {	store AccessTokensStore}// NewAccessTokensHandler returns a new AccessTokensHandler for users access// tokens API endpoints.func NewAccessTokensHandler(s AccessTokensStore) *AccessTokensHandler {	return &AccessTokensHandler{		store: s,	}}func (h *AccessTokensHandler) List() macaron.Handler {	return func(c *context.APIContext) {		tokens, err := h.store.ListAccessTokens(c.Req.Context(), c.User.ID)		if err != nil {			c.Error(err, "list access tokens")			return		}		apiTokens := make([]*api.AccessToken, len(tokens))		for i := range tokens {			apiTokens[i] = &api.AccessToken{Name: tokens[i].Name, Sha1: tokens[i].Sha1}		}		c.JSONSuccess(&apiTokens)	}}func (h *AccessTokensHandler) Create() macaron.Handler {	return func(c *context.APIContext, form api.CreateAccessTokenOption) {		t, err := h.store.CreateAccessToken(c.Req.Context(), c.User.ID, form.Name)		if err != nil {			if database.IsErrAccessTokenAlreadyExist(err) {				c.ErrorStatus(http.StatusUnprocessableEntity, err)			} else {				c.Error(err, "new access token")			}			return		}		c.JSON(http.StatusCreated, &api.AccessToken{Name: t.Name, Sha1: t.Sha1})	}}// AccessTokensStore is the data layer carrier for user access tokens API// endpoints. This interface is meant to abstract away and limit the exposure of// the underlying data layer to the handler through a thin-wrapper.type AccessTokensStore interface {	// CreateAccessToken creates a new access token and persist to database. It	// returns database.ErrAccessTokenAlreadyExist when an access token with same	// name already exists for the user.	CreateAccessToken(ctx gocontext.Context, userID int64, name string) (*database.AccessToken, error)	// ListAccessTokens returns all access tokens belongs to given user.	ListAccessTokens(ctx gocontext.Context, userID int64) ([]*database.AccessToken, error)}type accessTokensStore struct{}// NewAccessTokensStore returns a new AccessTokensStore using the global// database handle.func NewAccessTokensStore() AccessTokensStore {	return &accessTokensStore{}}func (*accessTokensStore) CreateAccessToken(ctx gocontext.Context, userID int64, name string) (*database.AccessToken, error) {	return database.Handle.AccessTokens().Create(ctx, userID, name)}func (*accessTokensStore) ListAccessTokens(ctx gocontext.Context, userID int64) ([]*database.AccessToken, error) {	return database.Handle.AccessTokens().List(ctx, userID)}
 |