2015-12-06 01:13:13 +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.
package admin
import (
2016-11-11 12:39:44 +03:00
api "code.gitea.io/sdk/gitea"
2015-12-06 01:13:13 +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/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/routers/api/v1/user"
2015-12-06 01:13:13 +03:00
)
2016-03-14 01:49:16 +03:00
func parseLoginSource ( ctx * context . APIContext , u * models . User , sourceID int64 , loginName string ) {
2015-12-06 01:13:13 +03:00
if sourceID == 0 {
return
}
source , err := models . GetLoginSourceByID ( sourceID )
if err != nil {
2016-08-31 10:56:10 +03:00
if models . IsErrLoginSourceNotExist ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Error ( 422 , "" , err )
2015-12-06 01:13:13 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "GetLoginSourceByID" , err )
2015-12-06 01:13:13 +03:00
}
return
}
u . LoginType = source . Type
u . LoginSource = source . ID
u . LoginName = loginName
}
2016-11-24 10:04:31 +03:00
// CreateUser api for creating a user
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-new-user
2016-03-14 01:49:16 +03:00
func CreateUser ( ctx * context . APIContext , form api . CreateUserOption ) {
2015-12-06 01:13:13 +03:00
u := & models . User {
Name : form . Username ,
2016-07-26 21:43:06 +03:00
FullName : form . FullName ,
2015-12-06 01:13:13 +03:00
Email : form . Email ,
Passwd : form . Password ,
IsActive : true ,
2016-11-07 19:30:04 +03:00
LoginType : models . LoginPlain ,
2015-12-06 01:13:13 +03:00
}
parseLoginSource ( ctx , u , form . SourceID , form . LoginName )
if ctx . Written ( ) {
return
}
if err := models . CreateUser ( u ) ; err != nil {
if models . IsErrUserAlreadyExist ( err ) ||
models . IsErrEmailAlreadyUsed ( err ) ||
models . IsErrNameReserved ( err ) ||
models . IsErrNamePatternNotAllowed ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Error ( 422 , "" , err )
2015-12-06 01:13:13 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "CreateUser" , err )
2015-12-06 01:13:13 +03:00
}
return
}
log . Trace ( "Account created by admin (%s): %s" , ctx . User . Name , u . Name )
2016-07-15 19:36:39 +03:00
// Send email notification.
2015-12-06 01:13:13 +03:00
if form . SendNotify && setting . MailService != nil {
2016-07-15 19:36:39 +03:00
models . SendRegisterNotifyMail ( ctx . Context . Context , u )
2015-12-06 01:13:13 +03:00
}
2016-08-14 14:17:26 +03:00
ctx . JSON ( 201 , u . APIFormat ( ) )
2015-12-06 01:13:13 +03:00
}
2016-11-24 10:04:31 +03:00
// EditUser api for modifying a user's information
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#edit-an-existing-user
2016-03-14 01:49:16 +03:00
func EditUser ( ctx * context . APIContext , form api . EditUserOption ) {
2015-12-06 01:13:13 +03:00
u := user . GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
parseLoginSource ( ctx , u , form . SourceID , form . LoginName )
if ctx . Written ( ) {
return
}
if len ( form . Password ) > 0 {
u . Passwd = form . Password
2016-12-20 15:32:02 +03:00
var err error
if u . Salt , err = models . GetUserSalt ( ) ; err != nil {
ctx . Error ( 500 , "UpdateUser" , err )
return
}
2015-12-06 01:13:13 +03:00
u . EncodePasswd ( )
}
u . LoginName = form . LoginName
u . FullName = form . FullName
u . Email = form . Email
u . Website = form . Website
u . Location = form . Location
if form . Active != nil {
u . IsActive = * form . Active
}
if form . Admin != nil {
u . IsAdmin = * form . Admin
}
if form . AllowGitHook != nil {
u . AllowGitHook = * form . AllowGitHook
}
if form . AllowImportLocal != nil {
u . AllowImportLocal = * form . AllowImportLocal
}
2016-08-11 21:49:31 +03:00
if form . MaxRepoCreation != nil {
u . MaxRepoCreation = * form . MaxRepoCreation
}
2015-12-06 01:13:13 +03:00
if err := models . UpdateUser ( u ) ; err != nil {
if models . IsErrEmailAlreadyUsed ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Error ( 422 , "" , err )
2015-12-06 01:13:13 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "UpdateUser" , err )
2015-12-06 01:13:13 +03:00
}
return
}
log . Trace ( "Account profile updated by admin (%s): %s" , ctx . User . Name , u . Name )
2016-08-14 14:17:26 +03:00
ctx . JSON ( 200 , u . APIFormat ( ) )
2015-12-06 01:13:13 +03:00
}
2016-11-24 10:04:31 +03:00
// DeleteUser api for deleting a user
2015-12-06 01:39:29 +03:00
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user
2016-03-14 01:49:16 +03:00
func DeleteUser ( ctx * context . APIContext ) {
2015-12-06 01:13:13 +03:00
u := user . GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
if err := models . DeleteUser ( u ) ; err != nil {
if models . IsErrUserOwnRepos ( err ) ||
models . IsErrUserHasOrgs ( err ) {
2016-03-14 01:49:16 +03:00
ctx . Error ( 422 , "" , err )
2015-12-06 01:13:13 +03:00
} else {
2016-03-14 01:49:16 +03:00
ctx . Error ( 500 , "DeleteUser" , err )
2015-12-06 01:13:13 +03:00
}
return
}
log . Trace ( "Account deleted by admin(%s): %s" , ctx . User . Name , u . Name )
ctx . Status ( 204 )
}
2016-11-24 10:04:31 +03:00
// CreatePublicKey api for creating a public key to a user
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-public-key-for-user
2016-03-14 01:49:16 +03:00
func CreatePublicKey ( ctx * context . APIContext , form api . CreateKeyOption ) {
2015-12-06 01:13:13 +03:00
u := user . GetUserByParams ( ctx )
if ctx . Written ( ) {
return
}
2016-07-23 20:08:22 +03:00
user . CreateUserPublicKey ( ctx , form , u . ID )
2015-12-06 01:13:13 +03:00
}