2014-06-25 08:44:48 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
2019-02-18 19:00:27 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2014-06-25 08:44:48 +04:00
2014-06-07 09:27:24 +04:00
package org
import (
2016-12-31 05:33:30 +03:00
"errors"
2021-04-05 18:30:52 +03:00
"net/http"
2016-12-31 05:33:30 +03:00
2021-11-24 12:49:20 +03:00
"code.gitea.io/gitea/models/db"
2022-03-29 09:29:02 +03:00
"code.gitea.io/gitea/models/organization"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
2021-01-26 18:36:53 +03:00
"code.gitea.io/gitea/modules/web"
2024-02-27 10:12:22 +03:00
"code.gitea.io/gitea/services/context"
2021-04-06 22:44:05 +03:00
"code.gitea.io/gitea/services/forms"
2014-06-25 08:44:48 +04:00
)
const (
2016-11-18 06:03:03 +03:00
// tplCreateOrg template path for create organization
tplCreateOrg base . TplName = "org/create"
2014-06-07 09:27:24 +04:00
)
2016-11-18 06:03:03 +03:00
// Create render the page for create organization
2016-03-11 19:56:52 +03:00
func Create ( ctx * context . Context ) {
2014-07-27 07:53:16 +04:00
ctx . Data [ "Title" ] = ctx . Tr ( "new_org" )
2019-02-18 19:00:27 +03:00
ctx . Data [ "DefaultOrgVisibilityMode" ] = setting . Service . DefaultOrgVisibilityMode
2022-03-22 10:03:22 +03:00
if ! ctx . Doer . CanCreateOrganization ( ) {
2024-02-15 00:48:45 +03:00
ctx . ServerError ( "Not allowed" , errors . New ( ctx . Locale . TrString ( "org.form.create_org_not_allowed" ) ) )
2016-12-31 05:33:30 +03:00
return
}
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCreateOrg )
2014-06-25 08:44:48 +04:00
}
2016-11-18 06:03:03 +03:00
// CreatePost response for create organization
2021-01-26 18:36:53 +03:00
func CreatePost ( ctx * context . Context ) {
2021-04-06 22:44:05 +03:00
form := * web . GetForm ( ctx ) . ( * forms . CreateOrgForm )
2018-01-12 17:37:30 +03:00
ctx . Data [ "Title" ] = ctx . Tr ( "new_org" )
2022-03-22 10:03:22 +03:00
if ! ctx . Doer . CanCreateOrganization ( ) {
2024-02-15 00:48:45 +03:00
ctx . ServerError ( "Not allowed" , errors . New ( ctx . Locale . TrString ( "org.form.create_org_not_allowed" ) ) )
2018-01-12 17:37:30 +03:00
return
2018-01-11 00:34:17 +03:00
}
2014-06-25 08:44:48 +04:00
if ctx . HasError ( ) {
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCreateOrg )
2014-06-25 08:44:48 +04:00
return
}
2022-03-29 09:29:02 +03:00
org := & organization . Organization {
2019-10-14 21:20:42 +03:00
Name : form . OrgName ,
IsActive : true ,
2021-11-24 12:49:20 +03:00
Type : user_model . UserTypeOrganization ,
2019-10-14 21:20:42 +03:00
Visibility : form . Visibility ,
RepoAdminChangeTeamAccess : form . RepoAdminChangeTeamAccess ,
2014-06-25 08:44:48 +04:00
}
2023-10-03 13:30:41 +03:00
if err := organization . CreateOrganization ( ctx , org , ctx . Doer ) ; err != nil {
2015-09-06 17:08:14 +03:00
ctx . Data [ "Err_OrgName" ] = true
2015-03-27 00:11:47 +03:00
switch {
2021-11-24 12:49:20 +03:00
case user_model . IsErrUserAlreadyExist ( err ) :
2016-11-18 06:03:03 +03:00
ctx . RenderWithErr ( ctx . Tr ( "form.org_name_been_taken" ) , tplCreateOrg , & form )
2021-11-24 12:49:20 +03:00
case db . IsErrNameReserved ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "org.form.name_reserved" , err . ( db . ErrNameReserved ) . Name ) , tplCreateOrg , & form )
case db . IsErrNamePatternNotAllowed ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "org.form.name_pattern_not_allowed" , err . ( db . ErrNamePatternNotAllowed ) . Pattern ) , tplCreateOrg , & form )
2022-03-29 09:29:02 +03:00
case organization . IsErrUserNotAllowedCreateOrg ( err ) :
2016-12-31 05:33:30 +03:00
ctx . RenderWithErr ( ctx . Tr ( "org.form.create_org_not_allowed" ) , tplCreateOrg , & form )
2014-06-25 08:44:48 +04:00
default :
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "CreateOrganization" , err )
2014-06-25 08:44:48 +04:00
}
return
}
2014-07-27 07:53:16 +04:00
log . Trace ( "Organization created: %s" , org . Name )
2014-06-25 08:44:48 +04:00
2021-11-19 14:41:40 +03:00
ctx . Redirect ( org . AsUser ( ) . DashboardLink ( ) )
2014-06-23 07:40:49 +04:00
}