From 098ea9343966dc19d2f76368a197badf3187ec34 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Tue, 1 Jul 2025 01:44:38 +0300 Subject: [PATCH] move create account functionality to the registration.go file --- handlers/application/menuhandler.go | 78 ------------------------ handlers/application/registration.go | 89 ++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 78 deletions(-) create mode 100644 handlers/application/registration.go diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 77abdd2..0107278 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -20,7 +20,6 @@ import ( "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.grassecon.net/grassrootseconomics/common/hex" "git.grassecon.net/grassrootseconomics/common/identity" commonlang "git.grassecon.net/grassrootseconomics/common/lang" "git.grassecon.net/grassrootseconomics/common/person" @@ -197,83 +196,6 @@ func (h *MenuHandlers) SetLanguage(ctx context.Context, sym string, input []byte return res, nil } -// handles the account creation when no existing account is present for the session and stores associated data in the user data store. -func (h *MenuHandlers) createAccountNoExist(ctx context.Context, sessionId string, res *resource.Result) error { - flag_account_created, _ := h.flagManager.GetFlag("flag_account_created") - flag_account_creation_failed, _ := h.flagManager.GetFlag("flag_account_creation_failed") - - r, err := h.accountService.CreateAccount(ctx) - if err != nil { - res.FlagSet = append(res.FlagSet, flag_account_creation_failed) - logg.ErrorCtxf(ctx, "failed to create an account", "error", err) - return nil - } - res.FlagReset = append(res.FlagReset, flag_account_creation_failed) - - trackingId := r.TrackingId - publicKey := r.PublicKey - - data := map[storedb.DataTyp]string{ - storedb.DATA_TRACKING_ID: trackingId, - storedb.DATA_PUBLIC_KEY: publicKey, - storedb.DATA_ACCOUNT_ALIAS: "", - } - store := h.userdataStore - logdb := h.logDb - for key, value := range data { - err = store.WriteEntry(ctx, sessionId, key, []byte(value)) - if err != nil { - return err - } - err = logdb.WriteLogEntry(ctx, sessionId, key, []byte(value)) - if err != nil { - logg.DebugCtxf(ctx, "Failed to write log entry", "key", key, "value", value) - } - } - publicKeyNormalized, err := hex.NormalizeHex(publicKey) - if err != nil { - return err - } - err = store.WriteEntry(ctx, publicKeyNormalized, storedb.DATA_PUBLIC_KEY_REVERSE, []byte(sessionId)) - if err != nil { - return err - } - - err = logdb.WriteLogEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY_REVERSE, []byte(sessionId)) - if err != nil { - logg.DebugCtxf(ctx, "Failed to write log entry", "key", storedb.DATA_PUBLIC_KEY_REVERSE, "value", sessionId) - } - - res.FlagSet = append(res.FlagSet, flag_account_created) - return nil -} - -// CreateAccount checks if any account exists on the JSON data file, and if not, -// creates an account on the API, -// sets the default values and flags. -func (h *MenuHandlers) CreateAccount(ctx context.Context, sym string, input []byte) (resource.Result, error) { - var res resource.Result - var err error - sessionId, ok := ctx.Value("SessionId").(string) - if !ok { - return res, fmt.Errorf("missing session") - } - store := h.userdataStore - _, err = store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY) - if err != nil { - if db.IsNotFound(err) { - logg.InfoCtxf(ctx, "Creating an account because it doesn't exist") - err = h.createAccountNoExist(ctx, sessionId, &res) - if err != nil { - logg.ErrorCtxf(ctx, "failed on createAccountNoExist", "error", err) - return res, err - } - } - } - - return res, nil -} - func (h *MenuHandlers) CheckAccountCreated(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result flag_language_set, _ := h.flagManager.GetFlag("flag_language_set") diff --git a/handlers/application/registration.go b/handlers/application/registration.go new file mode 100644 index 0000000..076790d --- /dev/null +++ b/handlers/application/registration.go @@ -0,0 +1,89 @@ +package application + +import ( + "context" + "fmt" + + "git.defalsify.org/vise.git/db" + "git.defalsify.org/vise.git/resource" + + "git.grassecon.net/grassrootseconomics/common/hex" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" +) + +// handles the account creation when no existing account is present for the session and stores associated data in the user data store. +func (h *MenuHandlers) createAccountNoExist(ctx context.Context, sessionId string, res *resource.Result) error { + flag_account_created, _ := h.flagManager.GetFlag("flag_account_created") + flag_account_creation_failed, _ := h.flagManager.GetFlag("flag_account_creation_failed") + + r, err := h.accountService.CreateAccount(ctx) + if err != nil { + res.FlagSet = append(res.FlagSet, flag_account_creation_failed) + logg.ErrorCtxf(ctx, "failed to create an account", "error", err) + return nil + } + res.FlagReset = append(res.FlagReset, flag_account_creation_failed) + + trackingId := r.TrackingId + publicKey := r.PublicKey + + data := map[storedb.DataTyp]string{ + storedb.DATA_TRACKING_ID: trackingId, + storedb.DATA_PUBLIC_KEY: publicKey, + storedb.DATA_ACCOUNT_ALIAS: "", + } + store := h.userdataStore + logdb := h.logDb + for key, value := range data { + err = store.WriteEntry(ctx, sessionId, key, []byte(value)) + if err != nil { + return err + } + err = logdb.WriteLogEntry(ctx, sessionId, key, []byte(value)) + if err != nil { + logg.DebugCtxf(ctx, "Failed to write log entry", "key", key, "value", value) + } + } + publicKeyNormalized, err := hex.NormalizeHex(publicKey) + if err != nil { + return err + } + err = store.WriteEntry(ctx, publicKeyNormalized, storedb.DATA_PUBLIC_KEY_REVERSE, []byte(sessionId)) + if err != nil { + return err + } + + err = logdb.WriteLogEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY_REVERSE, []byte(sessionId)) + if err != nil { + logg.DebugCtxf(ctx, "Failed to write log entry", "key", storedb.DATA_PUBLIC_KEY_REVERSE, "value", sessionId) + } + + res.FlagSet = append(res.FlagSet, flag_account_created) + return nil +} + +// CreateAccount checks if any account exists on the JSON data file, and if not, +// creates an account on the API, +// sets the default values and flags. +func (h *MenuHandlers) CreateAccount(ctx context.Context, sym string, input []byte) (resource.Result, error) { + var res resource.Result + var err error + sessionId, ok := ctx.Value("SessionId").(string) + if !ok { + return res, fmt.Errorf("missing session") + } + store := h.userdataStore + _, err = store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY) + if err != nil { + if db.IsNotFound(err) { + logg.InfoCtxf(ctx, "Creating an account because it doesn't exist") + err = h.createAccountNoExist(ctx, sessionId, &res) + if err != nil { + logg.ErrorCtxf(ctx, "failed on createAccountNoExist", "error", err) + return res, err + } + } + } + + return res, nil +}