package db import ( "errors" "farga/db/types" "farga/lib" "github.com/google/uuid" ) // Stores a user's public key in the db. Key parsed with lib.ParseKey() func (db *DB) NewPubKey(name string, pubKey lib.SSHPubKey, userID uuid.UUID) (types.SSHPubKey, error) { dbKey := types.SSHPubKey{ UserID: userID, PublicKey: pubKey.Key, Fingerprint: pubKey.Fingerprint, Algorithm: pubKey.Algorithm, Name: name, } if err := db.Create(&dbKey).Error; err != nil { if err.Error() == "UNIQUE constraint failed: ssh_pub_keys.fingerprint" { err = errors.New("SSH Key already exists.") } return types.SSHPubKey{}, err } return dbKey, nil } // Deletes a public key given it's UUID and the owner's UUID func (db *DB) DeletePubKey(keyID uuid.UUID, userID uuid.UUID) error { return db.Delete(&types.SSHPubKey{ UUID_ID: types.UUID_ID{ID: keyID}, UserID: userID, }).Error } // the title says it all. func (db *DB) UserByFingerprint(fingerprint string) (types.User, error) { key := types.SSHPubKey{Fingerprint: fingerprint} err := db.Where(&key).First(&key).Error if err != nil { return types.User{}, err } user := types.User{ UUID_ID: types.UUID_ID{ID: key.UserID}, } err = db.First(&user).Error return user, err }