mirror of
https://github.com/ente-io/ente.git
synced 2025-05-30 06:19:44 +00:00
45 lines
1.4 KiB
Go
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
|
|
}
|