Personal Git forge.

Code git clone ssh://git.poy.ooo:6969/~poyo/farga ZIP
db/ssh.go / 1KiB #6ec8d038
Raw
package dbimport (	"errors"	"farga/db/types"	"farga/lib"	"github.com/google/uuid"	"gorm.io/gorm")// 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 UUIDfunc (db *DB) DeletePubKey(keyID uuid.UUID, userID uuid.UUID) error {	res := db.Where("id = ? AND user_id = ?", keyID, userID).Delete(&types.SSHPubKey{})	if res.Error != nil {		return res.Error	}	if res.RowsAffected == 0 {		return gorm.ErrRecordNotFound	}	return nil}// 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}