2021-12-10 11:14:24 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2021-12-10 11:14:24 +03:00
package asymkey
import (
2023-09-25 16:17:37 +03:00
"context"
2021-12-10 11:14:24 +03:00
asymkey_model "code.gitea.io/gitea/models/asymkey"
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
)
// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
2023-09-25 16:17:37 +03:00
func DeletePublicKey ( ctx context . Context , doer * user_model . User , id int64 ) ( err error ) {
2023-10-11 07:24:07 +03:00
key , err := asymkey_model . GetPublicKeyByID ( ctx , id )
2021-12-10 11:14:24 +03:00
if err != nil {
return err
}
// Check if user has access to delete this key.
if ! doer . IsAdmin && doer . ID != key . OwnerID {
return asymkey_model . ErrKeyAccessDenied {
UserID : doer . ID ,
KeyID : key . ID ,
Note : "public" ,
}
}
2023-09-25 16:17:37 +03:00
dbCtx , committer , err := db . TxContext ( ctx )
2021-12-10 11:14:24 +03:00
if err != nil {
return err
}
defer committer . Close ( )
2023-09-25 16:17:37 +03:00
if err = asymkey_model . DeletePublicKeys ( dbCtx , id ) ; err != nil {
2021-12-10 11:14:24 +03:00
return err
}
if err = committer . Commit ( ) ; err != nil {
return err
}
committer . Close ( )
if key . Type == asymkey_model . KeyTypePrincipal {
2023-09-25 16:17:37 +03:00
return asymkey_model . RewriteAllPrincipalKeys ( ctx )
2021-12-10 11:14:24 +03:00
}
2023-09-25 16:17:37 +03:00
return asymkey_model . RewriteAllPublicKeys ( ctx )
2021-12-10 11:14:24 +03:00
}