2024-09-02 17:04:04 +05:30

45 lines
1.4 KiB
Go

package authenticator
import (
"context"
"database/sql"
"errors"
"github.com/ente-io/museum/ente"
model "github.com/ente-io/museum/ente/authenticator"
"github.com/ente-io/stacktrace"
)
// CreateTotpEntry inserts a new &{totp.CreateTotpEntry} entry
func (r *Repository) CreateKey(ctx context.Context, userID int64, entry model.CreateKeyRequest) error {
_, err := r.DB.ExecContext(ctx, `INSERT into authenticator_key(
user_id,
encrypted_key,
header) VALUES ($1,$2,$3)`,
userID, // $1 user_id
entry.EncryptedKey, // $2 encrypted_data
entry.Header)
if err != nil {
if err.Error() == "pq: duplicate key value violates unique constraint \"authenticator_key_pkey\"" {
return ente.NewConflictError("Key already exists")
}
return stacktrace.Propagate(err, "Failed to createTotpEntry")
}
return nil
}
func (r *Repository) GetKey(ctx context.Context, userID int64) (model.Key, error) {
row := r.DB.QueryRowContext(ctx, `SELECT user_id, encrypted_key, header,
created_at from authenticator_key where user_id = $1`, userID)
var result model.Key
err := row.Scan(&result.UserID, &result.EncryptedKey, &result.Header, &result.CreatedAt)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return result, stacktrace.Propagate(&ente.ErrNotFoundError, "authKey is not present")
}
return result, stacktrace.Propagate(err, "failed to authKey")
}
return result, nil
}