mirror of
https://github.com/go-gitea/gitea.git
synced 2026-09-13 11:25:34 -05:00
Co-authored-by: bircni <bircni@users.noreply.github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package asymkey
|
|
|
|
import (
|
|
"context"
|
|
|
|
asymkey_model "gitea.dev/models/asymkey"
|
|
audit_model "gitea.dev/models/audit"
|
|
"gitea.dev/models/db"
|
|
user_model "gitea.dev/models/user"
|
|
"gitea.dev/services/audit"
|
|
)
|
|
|
|
// DeletePublicKey deletes SSH key information both in database and authorized_keys file.
|
|
func DeletePublicKey(ctx context.Context, doer *user_model.User, id int64) (err error) {
|
|
key, err := asymkey_model.GetPublicKeyByID(ctx, id)
|
|
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",
|
|
}
|
|
}
|
|
|
|
if _, err = db.DeleteByID[asymkey_model.PublicKey](ctx, id); err != nil {
|
|
return err
|
|
}
|
|
|
|
owner := audit.ScopeFromUserID(ctx, key.OwnerID)
|
|
|
|
if key.Type == asymkey_model.KeyTypePrincipal {
|
|
audit.Record(ctx, audit_model.UserKeyPrincipalRemove, owner, "key", key.Name)
|
|
|
|
return RewriteAllPrincipalKeys(ctx)
|
|
}
|
|
|
|
audit.Record(ctx, audit_model.UserKeySSHRemove, owner, "fingerprint", key.Fingerprint)
|
|
|
|
return RewriteAllPublicKeys(ctx)
|
|
}
|