Some checks failed
cache-seeder / prune (push) Has been skipped
cache-seeder / frontend (push) Failing after 3s
cache-seeder / python (push) Failing after 3s
cache-seeder / gobuild (push) Failing after 4s
cache-seeder / lint (bindata, lint-backend) (push) Failing after 3s
giteabot backport / giteabot (push) Has been skipped
giteabot / giteabot (push) Has been skipped
cache-prune / prune (push) Has been skipped
release-nightly-snapcraft / build-and-publish (ubuntu-24.04) (push) Has been cancelled
release-nightly-snapcraft / build-and-publish (ubuntu-24.04-arm) (push) Has been cancelled
release-nightly / nightly-binary (push) Has been cancelled
release-nightly / nightly-container (push) Has been cancelled
cron-renovate / cron-renovate (push) Has been skipped
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)
|
|
}
|