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 (
api "github.com/gogits/go-gogs-client"
"github.com/gogits/gogs/models"
2016-03-11 19:56:52 +03:00
"github.com/gogits/gogs/modules/context"
2015-12-03 08:24:37 +03:00
"github.com/gogits/gogs/modules/setting"
2015-12-17 10:28:47 +03:00
"github.com/gogits/gogs/routers/api/v1/convert"
2015-12-05 01:16:42 +03:00
"github.com/gogits/gogs/routers/api/v1/repo"
2015-12-03 08:24:37 +03:00
)
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 {
return setting . AppUrl + "api/v1/user/keys/"
}
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 )
}
2015-12-05 01:16:42 +03:00
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-your-public-keys
2016-03-14 01:49:16 +03:00
func ListMyPublicKeys ( ctx * context . APIContext ) {
2016-07-23 20:08:22 +03:00
listPublicKeys ( ctx , ctx . User . ID )
2015-12-05 01:16:42 +03:00
}
2015-12-03 08:24:37 +03:00
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-public-keys-for-a-user
2016-03-14 01:49:16 +03:00
func ListPublicKeys ( ctx * context . APIContext ) {
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
}
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#get-a-single-public-key
2016-03-14 01:49:16 +03:00
func GetPublicKey ( ctx * context . APIContext ) {
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
}
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key
2016-03-14 01:49:16 +03:00
func CreatePublicKey ( ctx * context . APIContext , form api . CreateKeyOption ) {
2016-07-23 20:08:22 +03:00
CreateUserPublicKey ( ctx , form , ctx . User . ID )
2015-12-03 08:24:37 +03:00
}
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#delete-a-public-key
2016-03-14 01:49:16 +03:00
func DeletePublicKey ( ctx * context . APIContext ) {
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 )
}