2015-12-15 22:57:18 -05: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 user
import (
2020-11-15 00:53:43 +08:00
"fmt"
2019-12-20 18:07:12 +01:00
"net/http"
2021-11-11 15:03:30 +08:00
user_model "code.gitea.io/gitea/models/user"
2016-11-10 17:24:48 +01:00
"code.gitea.io/gitea/modules/context"
2019-11-10 12:41:51 +08:00
"code.gitea.io/gitea/modules/convert"
2016-11-10 17:24:48 +01:00
"code.gitea.io/gitea/modules/setting"
2019-08-23 09:40:30 -07:00
api "code.gitea.io/gitea/modules/structs"
2021-01-26 23:36:53 +08:00
"code.gitea.io/gitea/modules/web"
2015-12-15 22:57:18 -05:00
)
2017-11-12 23:02:25 -08:00
// ListEmails list all of the authenticated user's email addresses
2016-11-24 15:04:31 +08:00
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user
2016-03-13 18:49:16 -04:00
func ListEmails ( ctx * context . APIContext ) {
2017-11-12 23:02:25 -08:00
// swagger:operation GET /user/emails user userListEmails
// ---
// summary: List the authenticated user's email addresses
// produces:
// - application/json
// responses:
// "200":
// "$ref": "#/responses/EmailList"
2019-12-20 18:07:12 +01:00
2021-11-11 15:03:30 +08:00
emails , err := user_model . GetEmailAddresses ( ctx . User . ID )
2015-12-15 22:57:18 -05:00
if err != nil {
2019-12-20 18:07:12 +01:00
ctx . Error ( http . StatusInternalServerError , "GetEmailAddresses" , err )
2015-12-15 22:57:18 -05:00
return
}
apiEmails := make ( [ ] * api . Email , len ( emails ) )
for i := range emails {
2016-03-13 23:20:22 -04:00
apiEmails [ i ] = convert . ToEmail ( emails [ i ] )
2015-12-15 22:57:18 -05:00
}
2019-12-20 18:07:12 +01:00
ctx . JSON ( http . StatusOK , & apiEmails )
2015-12-15 22:57:18 -05:00
}
2017-11-12 23:02:25 -08:00
// AddEmail add an email address
2021-01-26 23:36:53 +08:00
func AddEmail ( ctx * context . APIContext ) {
2017-11-12 23:02:25 -08:00
// swagger:operation POST /user/emails user userAddEmail
// ---
// summary: Add email addresses
// produces:
// - application/json
// parameters:
// - name: options
// in: body
// schema:
// "$ref": "#/definitions/CreateEmailOption"
// parameters:
// - name: body
// in: body
// schema:
// "$ref": "#/definitions/CreateEmailOption"
// responses:
// '201':
// "$ref": "#/responses/EmailList"
2019-12-20 18:07:12 +01:00
// "422":
// "$ref": "#/responses/validationError"
2021-01-26 23:36:53 +08:00
form := web . GetForm ( ctx ) . ( * api . CreateEmailOption )
2015-12-15 22:57:18 -05:00
if len ( form . Emails ) == 0 {
2019-12-20 18:07:12 +01:00
ctx . Error ( http . StatusUnprocessableEntity , "" , "Email list empty" )
2015-12-15 22:57:18 -05:00
return
}
2021-11-11 15:03:30 +08:00
emails := make ( [ ] * user_model . EmailAddress , len ( form . Emails ) )
2015-12-15 22:57:18 -05:00
for i := range form . Emails {
2021-11-11 15:03:30 +08:00
emails [ i ] = & user_model . EmailAddress {
2016-07-24 01:08:22 +08:00
UID : ctx . User . ID ,
2015-12-15 22:57:18 -05:00
Email : form . Emails [ i ] ,
IsActivated : ! setting . Service . RegisterEmailConfirm ,
}
}
2021-11-11 15:03:30 +08:00
if err := user_model . AddEmailAddresses ( emails ) ; err != nil {
if user_model . IsErrEmailAlreadyUsed ( err ) {
ctx . Error ( http . StatusUnprocessableEntity , "" , "Email address has been used: " + err . ( user_model . ErrEmailAlreadyUsed ) . Email )
} else if user_model . IsErrEmailInvalid ( err ) {
errMsg := fmt . Sprintf ( "Email address %s invalid" , err . ( user_model . ErrEmailInvalid ) . Email )
2020-11-15 00:53:43 +08:00
ctx . Error ( http . StatusUnprocessableEntity , "" , errMsg )
2015-12-15 22:57:18 -05:00
} else {
2019-12-20 18:07:12 +01:00
ctx . Error ( http . StatusInternalServerError , "AddEmailAddresses" , err )
2015-12-15 22:57:18 -05:00
}
return
}
apiEmails := make ( [ ] * api . Email , len ( emails ) )
for i := range emails {
2016-03-13 23:20:22 -04:00
apiEmails [ i ] = convert . ToEmail ( emails [ i ] )
2015-12-15 22:57:18 -05:00
}
2019-12-20 18:07:12 +01:00
ctx . JSON ( http . StatusCreated , & apiEmails )
2015-12-15 22:57:18 -05:00
}
2016-11-24 15:04:31 +08:00
// DeleteEmail delete email
2021-01-26 23:36:53 +08:00
func DeleteEmail ( ctx * context . APIContext ) {
2017-11-12 23:02:25 -08:00
// swagger:operation DELETE /user/emails user userDeleteEmail
// ---
// summary: Delete email addresses
// produces:
// - application/json
// parameters:
// - name: body
// in: body
// schema:
// "$ref": "#/definitions/DeleteEmailOption"
// responses:
// "204":
// "$ref": "#/responses/empty"
2021-04-10 14:12:38 +08:00
// "404":
// "$ref": "#/responses/notFound"
2021-01-26 23:36:53 +08:00
form := web . GetForm ( ctx ) . ( * api . DeleteEmailOption )
2015-12-15 22:57:18 -05:00
if len ( form . Emails ) == 0 {
2019-12-20 18:07:12 +01:00
ctx . Status ( http . StatusNoContent )
2015-12-15 22:57:18 -05:00
return
}
2021-11-11 15:03:30 +08:00
emails := make ( [ ] * user_model . EmailAddress , len ( form . Emails ) )
2015-12-15 22:57:18 -05:00
for i := range form . Emails {
2021-11-11 15:03:30 +08:00
emails [ i ] = & user_model . EmailAddress {
2015-12-15 22:57:18 -05:00
Email : form . Emails [ i ] ,
2016-12-15 16:49:06 +08:00
UID : ctx . User . ID ,
2015-12-15 22:57:18 -05:00
}
}
2021-11-11 15:03:30 +08:00
if err := user_model . DeleteEmailAddresses ( emails ) ; err != nil {
if user_model . IsErrEmailAddressNotExist ( err ) {
2021-04-10 14:12:38 +08:00
ctx . Error ( http . StatusNotFound , "DeleteEmailAddresses" , err )
return
}
2019-12-20 18:07:12 +01:00
ctx . Error ( http . StatusInternalServerError , "DeleteEmailAddresses" , err )
2015-12-15 22:57:18 -05:00
return
}
2019-12-20 18:07:12 +01:00
ctx . Status ( http . StatusNoContent )
2015-12-15 22:57:18 -05:00
}