2015-12-05 01:16:42 +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-17 10:28:47 +03:00
package convert
2015-12-05 01:16:42 +03:00
import (
"fmt"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2018-02-20 15:50:42 +03:00
"code.gitea.io/gitea/modules/log"
2019-04-15 19:36:59 +03:00
"code.gitea.io/gitea/modules/markup"
2018-02-20 15:50:42 +03:00
"code.gitea.io/gitea/modules/util"
2019-03-27 12:33:00 +03:00
api "code.gitea.io/sdk/gitea"
"github.com/Unknwon/com"
2015-12-05 01:16:42 +03:00
)
2016-11-24 10:04:31 +03:00
// ToEmail convert models.EmailAddress to api.Email
2016-03-14 06:20:22 +03:00
func ToEmail ( email * models . EmailAddress ) * api . Email {
2015-12-16 06:57:18 +03:00
return & api . Email {
Email : email . Email ,
Verified : email . IsActivated ,
Primary : email . IsPrimary ,
}
}
2016-11-24 10:04:31 +03:00
// ToBranch convert a commit and branch to an api.Branch
2018-02-20 15:50:42 +03:00
func ToBranch ( repo * models . Repository , b * models . Branch , c * git . Commit ) * api . Branch {
2016-01-28 22:49:05 +03:00
return & api . Branch {
2016-03-14 06:20:22 +03:00
Name : b . Name ,
2018-02-20 15:50:42 +03:00
Commit : ToCommit ( repo , c ) ,
2016-03-14 06:20:22 +03:00
}
2016-01-28 22:49:05 +03:00
}
2019-02-07 15:00:52 +03:00
// ToTag convert a tag to an api.Tag
func ToTag ( repo * models . Repository , t * git . Tag ) * api . Tag {
return & api . Tag {
Name : t . Name ,
Commit : struct {
SHA string ` json:"sha" `
URL string ` json:"url" `
} {
SHA : t . ID . String ( ) ,
URL : util . URLJoin ( repo . Link ( ) , "commit" , t . ID . String ( ) ) ,
} ,
ZipballURL : util . URLJoin ( repo . Link ( ) , "archive" , t . Name + ".zip" ) ,
TarballURL : util . URLJoin ( repo . Link ( ) , "archive" , t . Name + ".tar.gz" ) ,
}
}
2016-11-24 10:04:31 +03:00
// ToCommit convert a commit to api.PayloadCommit
2018-02-20 15:50:42 +03:00
func ToCommit ( repo * models . Repository , c * git . Commit ) * api . PayloadCommit {
2016-08-10 08:01:57 +03:00
authorUsername := ""
2018-02-20 15:50:42 +03:00
if author , err := models . GetUserByEmail ( c . Author . Email ) ; err == nil {
2016-08-10 08:01:57 +03:00
authorUsername = author . Name
2018-02-20 15:50:42 +03:00
} else if ! models . IsErrUserNotExist ( err ) {
2019-04-02 10:48:31 +03:00
log . Error ( "GetUserByEmail: %v" , err )
2016-08-10 08:01:57 +03:00
}
2018-02-20 15:50:42 +03:00
2016-08-10 08:01:57 +03:00
committerUsername := ""
2018-02-20 15:50:42 +03:00
if committer , err := models . GetUserByEmail ( c . Committer . Email ) ; err == nil {
2016-08-10 08:01:57 +03:00
committerUsername = committer . Name
2018-02-20 15:50:42 +03:00
} else if ! models . IsErrUserNotExist ( err ) {
2019-04-02 10:48:31 +03:00
log . Error ( "GetUserByEmail: %v" , err )
2016-08-10 08:01:57 +03:00
}
2018-02-20 15:50:42 +03:00
2017-03-22 13:43:54 +03:00
verif := models . ParseCommitWithSignature ( c )
2017-04-07 04:40:05 +03:00
var signature , payload string
if c . Signature != nil {
signature = c . Signature . Signature
payload = c . Signature . Payload
}
2018-02-20 15:50:42 +03:00
2016-01-28 22:49:05 +03:00
return & api . PayloadCommit {
2016-03-14 06:20:22 +03:00
ID : c . ID . String ( ) ,
2016-01-28 22:49:05 +03:00
Message : c . Message ( ) ,
2018-02-20 15:50:42 +03:00
URL : util . URLJoin ( repo . Link ( ) , "commit" , c . ID . String ( ) ) ,
2016-08-14 14:17:26 +03:00
Author : & api . PayloadUser {
2016-08-10 08:01:57 +03:00
Name : c . Author . Name ,
Email : c . Author . Email ,
UserName : authorUsername ,
} ,
2016-08-14 14:17:26 +03:00
Committer : & api . PayloadUser {
2016-08-10 08:01:57 +03:00
Name : c . Committer . Name ,
Email : c . Committer . Email ,
UserName : committerUsername ,
2016-01-28 22:49:05 +03:00
} ,
2016-08-10 08:01:57 +03:00
Timestamp : c . Author . When ,
2017-03-22 13:43:54 +03:00
Verification : & api . PayloadCommitVerification {
Verified : verif . Verified ,
Reason : verif . Reason ,
2017-04-07 04:40:05 +03:00
Signature : signature ,
Payload : payload ,
2017-03-22 13:43:54 +03:00
} ,
2016-01-28 22:49:05 +03:00
}
}
2016-11-24 10:04:31 +03:00
// ToPublicKey convert models.PublicKey to api.PublicKey
2016-03-14 06:20:22 +03:00
func ToPublicKey ( apiLink string , key * models . PublicKey ) * api . PublicKey {
2015-12-05 01:16:42 +03:00
return & api . PublicKey {
2017-11-28 18:21:39 +03:00
ID : key . ID ,
Key : key . Content ,
URL : apiLink + com . ToStr ( key . ID ) ,
Title : key . Name ,
Fingerprint : key . Fingerprint ,
2017-12-11 07:37:04 +03:00
Created : key . CreatedUnix . AsTime ( ) ,
2015-12-05 01:16:42 +03:00
}
}
2017-03-16 04:27:35 +03:00
// ToGPGKey converts models.GPGKey to api.GPGKey
func ToGPGKey ( key * models . GPGKey ) * api . GPGKey {
subkeys := make ( [ ] * api . GPGKey , len ( key . SubsKey ) )
for id , k := range key . SubsKey {
subkeys [ id ] = & api . GPGKey {
ID : k . ID ,
PrimaryKeyID : k . PrimaryKeyID ,
KeyID : k . KeyID ,
PublicKey : k . Content ,
2017-12-11 07:37:04 +03:00
Created : k . CreatedUnix . AsTime ( ) ,
Expires : k . ExpiredUnix . AsTime ( ) ,
2017-03-16 04:27:35 +03:00
CanSign : k . CanSign ,
CanEncryptComms : k . CanEncryptComms ,
CanEncryptStorage : k . CanEncryptStorage ,
CanCertify : k . CanSign ,
}
}
emails := make ( [ ] * api . GPGKeyEmail , len ( key . Emails ) )
for i , e := range key . Emails {
emails [ i ] = ToGPGKeyEmail ( e )
}
return & api . GPGKey {
ID : key . ID ,
PrimaryKeyID : key . PrimaryKeyID ,
KeyID : key . KeyID ,
PublicKey : key . Content ,
2017-12-11 07:37:04 +03:00
Created : key . CreatedUnix . AsTime ( ) ,
Expires : key . ExpiredUnix . AsTime ( ) ,
2017-03-16 04:27:35 +03:00
Emails : emails ,
SubsKey : subkeys ,
CanSign : key . CanSign ,
CanEncryptComms : key . CanEncryptComms ,
CanEncryptStorage : key . CanEncryptStorage ,
CanCertify : key . CanSign ,
}
}
// ToGPGKeyEmail convert models.EmailAddress to api.GPGKeyEmail
func ToGPGKeyEmail ( email * models . EmailAddress ) * api . GPGKeyEmail {
return & api . GPGKeyEmail {
Email : email . Email ,
Verified : email . IsActivated ,
}
}
2016-11-24 10:04:31 +03:00
// ToHook convert models.Webhook to api.Hook
2016-03-14 06:20:22 +03:00
func ToHook ( repoLink string , w * models . Webhook ) * api . Hook {
2015-12-05 01:16:42 +03:00
config := map [ string ] string {
"url" : w . URL ,
"content_type" : w . ContentType . Name ( ) ,
}
if w . HookTaskType == models . SLACK {
s := w . GetSlackHook ( )
config [ "channel" ] = s . Channel
config [ "username" ] = s . Username
config [ "icon_url" ] = s . IconURL
config [ "color" ] = s . Color
}
return & api . Hook {
ID : w . ID ,
Type : w . HookTaskType . Name ( ) ,
URL : fmt . Sprintf ( "%s/settings/hooks/%d" , repoLink , w . ID ) ,
Active : w . IsActive ,
Config : config ,
Events : w . EventsArray ( ) ,
2017-12-11 07:37:04 +03:00
Updated : w . UpdatedUnix . AsTime ( ) ,
Created : w . CreatedUnix . AsTime ( ) ,
2015-12-05 01:16:42 +03:00
}
}
2016-11-24 10:04:31 +03:00
// ToDeployKey convert models.DeployKey to api.DeployKey
2016-03-14 06:20:22 +03:00
func ToDeployKey ( apiLink string , key * models . DeployKey ) * api . DeployKey {
2015-12-05 01:16:42 +03:00
return & api . DeployKey {
2018-11-01 06:40:49 +03:00
ID : key . ID ,
KeyID : key . KeyID ,
Key : key . Content ,
Fingerprint : key . Fingerprint ,
URL : apiLink + com . ToStr ( key . ID ) ,
Title : key . Name ,
Created : key . CreatedUnix . AsTime ( ) ,
ReadOnly : key . Mode == models . AccessModeRead , // All deploy keys are read-only.
2015-12-05 01:16:42 +03:00
}
}
2015-12-17 10:28:47 +03:00
2016-11-24 10:04:31 +03:00
// ToOrganization convert models.User to api.Organization
2016-03-14 06:20:22 +03:00
func ToOrganization ( org * models . User ) * api . Organization {
2015-12-17 10:28:47 +03:00
return & api . Organization {
2016-07-23 20:08:22 +03:00
ID : org . ID ,
2016-11-29 11:25:47 +03:00
AvatarURL : org . AvatarLink ( ) ,
2015-12-17 10:28:47 +03:00
UserName : org . Name ,
FullName : org . FullName ,
Description : org . Description ,
Website : org . Website ,
Location : org . Location ,
}
}
2016-03-21 19:47:54 +03:00
2016-11-24 10:04:31 +03:00
// ToTeam convert models.Team to api.Team
2016-03-21 19:47:54 +03:00
func ToTeam ( team * models . Team ) * api . Team {
return & api . Team {
ID : team . ID ,
Name : team . Name ,
Description : team . Description ,
Permission : team . Authorize . String ( ) ,
2018-11-10 22:45:32 +03:00
Units : team . GetUnitNames ( ) ,
2016-03-21 19:47:54 +03:00
}
}
2019-04-15 19:36:59 +03:00
// ToUser convert models.User to api.User
func ToUser ( user * models . User , signed , admin bool ) * api . User {
result := & api . User {
ID : user . ID ,
UserName : user . Name ,
AvatarURL : user . AvatarLink ( ) ,
FullName : markup . Sanitize ( user . FullName ) ,
IsAdmin : user . IsAdmin ,
}
if signed && ( ! user . KeepEmailPrivate || admin ) {
result . Email = user . Email
}
return result
}