df/bff/gapi/rpc_verify_email.go
2023-10-19 00:28:53 +02:00

54 lines
1.3 KiB
Go

package gapi
import (
"context"
"database/sql"
"errors"
"log/slog"
"time"
db "github.com/itsscb/df/bff/db/sqlc"
"github.com/itsscb/df/bff/pb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func (server *Server) VerifyEmail(ctx context.Context, req *pb.VerifyEmailRequest) (*pb.VerifyEmailResponse, error) {
account, err := server.store.GetAccount(ctx, req.GetAccountId())
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, status.Errorf(codes.NotFound, "account not found")
}
slog.Error("verify_email (get_account)", slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
return nil, status.Error(codes.Internal, "failed to get account")
}
if account.ID != req.GetAccountId() {
return nil, status.Error(codes.NotFound, "account not found")
}
if account.SecretKey.String != req.GetSecretKey() {
return nil, status.Error(codes.NotFound, "unknown secret_key: "+req.GetSecretKey())
}
arg := db.VerifyAccountEmailParams{
ID: account.ID,
EmailVerified: sql.NullBool{
Valid: true,
Bool: true,
},
EmailVerifiedTime: sql.NullTime{
Valid: true,
Time: time.Now(),
},
}
err = server.store.VerifyAccountEmail(ctx, arg)
rsp := &pb.VerifyEmailResponse{
Verified: err == nil,
}
return rsp, err
}