2015-12-03 08:24:37 +03:00
// Copyright 2015 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.
2015-12-05 01:16:42 +03:00
package user
2015-12-03 08:24:37 +03:00
import (
2016-11-11 12:39:44 +03:00
api "code.gitea.io/sdk/gitea"
2015-12-03 08:24:37 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/routers/api/v1/convert"
"code.gitea.io/gitea/routers/api/v1/repo"
2015-12-03 08:24:37 +03:00
)
2016-11-24 10:04:31 +03:00
// GetUserByParamsName get user by name
2016-03-14 01:49:16 +03:00
func GetUserByParamsName ( ctx * context . APIContext , name string ) * models . User {
2015-12-17 10:28:47 +03:00
user , err := models . GetUserByName ( ctx . Params ( name ) )
2015-12-05 01:16:42 +03:00
if err != nil {
if models . IsErrUserNotExist ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2015-12-05 01:16:42 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetUserByName" , err )
2015-12-05 01:16:42 +03:00
}
return nil
2015-12-03 08:24:37 +03:00
}
2015-12-05 01:16:42 +03:00
return user
2015-12-03 08:24:37 +03:00
}
2015-12-17 10:28:47 +03:00
// GetUserByParams returns user whose name is presented in URL paramenter.
2016-03-14 01:49:16 +03:00
func GetUserByParams ( ctx * context . APIContext ) * models . User {
2015-12-17 10:28:47 +03:00
return GetUserByParamsName ( ctx , ":username" )
}
2015-12-03 08:24:37 +03:00
func composePublicKeysAPILink ( ) string {
2016-11-27 13:14:25 +03:00
return setting . AppURL + "api/v1/user/keys/"
2015-12-03 08:24:37 +03:00
}
2016-03-14 01:49:16 +03:00
func listPublicKeys ( ctx * context . APIContext , uid int64 ) {
2015-12-03 08:24:37 +03:00
keys , err := models . ListPublicKeys ( uid )
if err != nil {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "ListPublicKeys" , err )
2015-12-03 08:24:37 +03:00
return
}
apiLink := composePublicKeysAPILink ( )
apiKeys := make ( [ ] * api . PublicKey , len ( keys ) )
for i := range keys {
2016-03-14 06:20:22 +03:00
apiKeys [ i ] = convert . ToPublicKey ( apiLink , keys [ i ] )
2015-12-03 08:24:37 +03:00
}
ctx . JSON ( 200 , & apiKeys )
}
2016-11-24 10:04:31 +03:00
// ListMyPublicKeys list all my public keys
2016-03-14 01:49:16 +03:00
func ListMyPublicKeys ( ctx * context . APIContext ) {
2017-05-02 16:35:59 +03:00
// swagger:route GET /user/keys userCurrentListKeys
//
// Produces:
// - application/json
//
// Responses:
// 200: PublicKeyList
// 500: error
2016-07-23 20:08:22 +03:00
listPublicKeys ( ctx , ctx . User . ID )
2015-12-05 01:16:42 +03:00
}
2016-11-24 10:04:31 +03:00
// ListPublicKeys list all user's public keys
2016-03-14 01:49:16 +03:00
func ListPublicKeys ( ctx * context . APIContext ) {
2017-05-02 16:35:59 +03:00
// swagger:route GET /users/{username}/keys userListKeys
//
// Produces:
// - application/json
//
// Responses:
// 200: PublicKeyList
// 500: error
2015-12-06 01:13:13 +03:00
user := GetUserByParams ( ctx )
2015-12-05 01:16:42 +03:00
if ctx . Written ( ) {
2015-12-03 08:24:37 +03:00
return
}
2016-07-23 20:08:22 +03:00
listPublicKeys ( ctx , user . ID )
2015-12-03 08:24:37 +03:00
}
2016-11-24 10:04:31 +03:00
// GetPublicKey get one public key
2016-03-14 01:49:16 +03:00
func GetPublicKey ( ctx * context . APIContext ) {
2017-05-02 16:35:59 +03:00
// swagger:route GET /user/keys/{id} userCurrentGetKey
//
// Produces:
// - application/json
//
// Responses:
// 200: PublicKey
// 404: notFound
// 500: error
2015-12-03 08:24:37 +03:00
key , err := models . GetPublicKeyByID ( ctx . ParamsInt64 ( ":id" ) )
if err != nil {
if models . IsErrKeyNotExist ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Status ( 404 )
2015-12-03 08:24:37 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetPublicKeyByID" , err )
2015-12-03 08:24:37 +03:00
}
return
}
apiLink := composePublicKeysAPILink ( )
2016-03-14 06:20:22 +03:00
ctx . JSON ( 200 , convert . ToPublicKey ( apiLink , key ) )
2015-12-03 08:24:37 +03:00
}
2015-12-06 01:13:13 +03:00
// CreateUserPublicKey creates new public key to given user by ID.
2016-03-14 01:49:16 +03:00
func CreateUserPublicKey ( ctx * context . APIContext , form api . CreateKeyOption , uid int64 ) {
2015-12-03 08:24:37 +03:00
content , err := models . CheckPublicKeyString ( form . Key )
if err != nil {
2015-12-05 01:16:42 +03:00
repo . HandleCheckKeyStringError ( ctx , err )
2015-12-03 08:24:37 +03:00
return
}
2015-12-05 01:16:42 +03:00
key , err := models . AddPublicKey ( uid , form . Title , content )
2015-12-03 08:24:37 +03:00
if err != nil {
2015-12-05 01:16:42 +03:00
repo . HandleAddKeyError ( ctx , err )
2015-12-03 08:24:37 +03:00
return
}
apiLink := composePublicKeysAPILink ( )
2016-03-14 06:20:22 +03:00
ctx . JSON ( 201 , convert . ToPublicKey ( apiLink , key ) )
2015-12-05 01:16:42 +03:00
}
2016-11-24 10:04:31 +03:00
// CreatePublicKey create one public key for me
2016-03-14 01:49:16 +03:00
func CreatePublicKey ( ctx * context . APIContext , form api . CreateKeyOption ) {
2017-05-02 16:35:59 +03:00
// swagger:route POST /user/keys userCurrentPostKey
//
// Consumes:
// - application/json
//
// Produces:
// - application/json
//
// Responses:
// 201: PublicKey
// 422: validationError
// 500: error
2016-07-23 20:08:22 +03:00
CreateUserPublicKey ( ctx , form , ctx . User . ID )
2015-12-03 08:24:37 +03:00
}
2016-11-24 10:04:31 +03:00
// DeletePublicKey delete one public key of mine
2016-03-14 01:49:16 +03:00
func DeletePublicKey ( ctx * context . APIContext ) {
2017-05-02 16:35:59 +03:00
// swagger:route DELETE /user/keys/{id} userCurrentDeleteKey
//
// Produces:
// - application/json
//
// Responses:
// 204: empty
// 403: forbidden
// 500: error
2015-12-03 08:24:37 +03:00
if err := models . DeletePublicKey ( ctx . User , ctx . ParamsInt64 ( ":id" ) ) ; err != nil {
if models . IsErrKeyAccessDenied ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Error ( 403 , "" , "You do not have access to this key" )
2015-12-03 08:24:37 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "DeletePublicKey" , err )
2015-12-03 08:24:37 +03:00
}
return
}
ctx . Status ( 204 )
}