From 6aa4bd89062c83216180e284c607a20619dd644b Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 17 Jan 2025 15:02:58 +0300 Subject: [PATCH 01/22] add alias search domains --- .env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env.example b/.env.example index f518d39..7287e7c 100644 --- a/.env.example +++ b/.env.example @@ -18,3 +18,6 @@ DATA_URL_BASE=http://localhost:5006 #Language DEFAULT_LANGUAGE=eng LANGUAGES=eng, swa + +#Alias search domains +ALIAS_SEARCH_DOMAINS=sarafu.local, sarafu.eth From cdb22f8cbb389c55e5834563fd0397014fb8fc83 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Sat, 18 Jan 2025 07:50:55 +0300 Subject: [PATCH 02/22] add key for the account alias --- store/db/db.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/store/db/db.go b/store/db/db.go index 2ccd9e6..10f360a 100644 --- a/store/db/db.go +++ b/store/db/db.go @@ -61,6 +61,8 @@ const ( DATA_SELECTED_LANGUAGE_CODE //ISO 639 code for the language initially selected. DATA_INITIAL_LANGUAGE_CODE + //Fully qualified account alias string + DATA_ACCOUNT_ALIAS ) const ( From e29bcb5b27d05d5b31f723230cba69bb408447e6 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Sat, 18 Jan 2025 07:52:08 +0300 Subject: [PATCH 03/22] define and parse alias search domains --- config/config.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/config/config.go b/config/config.go index 61521f2..c1ad1d8 100644 --- a/config/config.go +++ b/config/config.go @@ -1,9 +1,11 @@ package config import ( - "git.grassecon.net/grassrootseconomics/visedriver/env" - viseconfig "git.grassecon.net/grassrootseconomics/visedriver/config" + "strings" + apiconfig "git.grassecon.net/grassrootseconomics/sarafu-api/config" + viseconfig "git.grassecon.net/grassrootseconomics/visedriver/config" + "git.grassecon.net/grassrootseconomics/visedriver/env" ) func init() { @@ -11,13 +13,13 @@ func init() { } const ( - defaultSSHHost string = "127.0.0.1" - defaultSSHPort uint = 7122 + defaultSSHHost string = "127.0.0.1" + defaultSSHPort uint = 7122 defaultHTTPHost string = "127.0.0.1" - defaultHTTPPort uint = 7123 + defaultHTTPPort uint = 7123 + defaultDomain = "sarafu.local" ) - func LoadConfig() error { err := viseconfig.LoadConfig() if err != nil { @@ -30,6 +32,16 @@ func LoadConfig() error { return nil } +func SearchDomains() []string { + var ParsedDomains []string + SearchDomains := env.GetEnv("ALIAS_SEARCH_DOMAINS", defaultDomain) + SearchDomainList := strings.Split(env.GetEnv("ALIAS_SEARCH_DOMAINS", SearchDomains), ",") + for _, domain := range SearchDomainList { + ParsedDomains = append(ParsedDomains, strings.ReplaceAll(domain, " ", "")) + } + return ParsedDomains +} + func DbConn() string { return viseconfig.DbConn } From efaf0ab22eea979f5b94dbee503517fcec29d0b8 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Sat, 18 Jan 2025 07:53:42 +0300 Subject: [PATCH 04/22] feat: construct an account alias --- handlers/application/menuhandler.go | 113 +++++++++++++++++++++------- 1 file changed, 86 insertions(+), 27 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 28f6854..bd14396 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -18,17 +18,20 @@ import ( "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api" + "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" + "git.grassecon.net/grassrootseconomics/common/phone" + "git.grassecon.net/grassrootseconomics/common/pin" + "git.grassecon.net/grassrootseconomics/sarafu-api/dev" + "git.grassecon.net/grassrootseconomics/sarafu-api/models" + "git.grassecon.net/grassrootseconomics/sarafu-api/remote" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" "git.grassecon.net/grassrootseconomics/sarafu-vise/profile" "git.grassecon.net/grassrootseconomics/sarafu-vise/store" storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" - "git.grassecon.net/grassrootseconomics/sarafu-api/remote" - "git.grassecon.net/grassrootseconomics/common/hex" - commonlang "git.grassecon.net/grassrootseconomics/common/lang" - "git.grassecon.net/grassrootseconomics/common/pin" - "git.grassecon.net/grassrootseconomics/common/person" - "git.grassecon.net/grassrootseconomics/common/phone" - "git.grassecon.net/grassrootseconomics/common/identity" + dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api" ) var ( @@ -99,7 +102,7 @@ func NewMenuHandlers(appFlags *asm.FlagParser, userdataStore db.Db, adminstore * } // WithPersister sets persister instance to the handlers. -//func (h *MenuHandlers) WithPersister(pe *persist.Persister) *MenuHandlers { +// func (h *MenuHandlers) WithPersister(pe *persist.Persister) *MenuHandlers { func (h *MenuHandlers) SetPersister(pe *persist.Persister) { if h.pe != nil { panic("persister already set") @@ -108,7 +111,6 @@ func (h *MenuHandlers) SetPersister(pe *persist.Persister) { //return h } - // Init initializes the handler for a new session. func (h *MenuHandlers) Init(ctx context.Context, sym string, input []byte) (resource.Result, error) { var r resource.Result @@ -465,6 +467,10 @@ func (h *MenuHandlers) SaveFirstname(ctx context.Context, sym string, input []by logg.ErrorCtxf(ctx, "failed to write firstName entry with", "key", storedb.DATA_FIRST_NAME, "value", temporaryFirstName, "error", err) return res, err } + err := h.constructAccountAlias(ctx) + if err != nil { + return res, err + } res.FlagSet = append(res.FlagSet, flag_firstname_set) } else { if firstNameSet { @@ -1080,16 +1086,16 @@ func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, in // TODO: split up functino func (h *MenuHandlers) ValidateRecipient(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result + var AliasAddressResult string + var AliasAddress *models.AliasAddress store := h.userdataStore sessionId, ok := ctx.Value("SessionId").(string) if !ok { return res, fmt.Errorf("missing session") } - flag_invalid_recipient, _ := h.flagManager.GetFlag("flag_invalid_recipient") flag_invalid_recipient_with_invite, _ := h.flagManager.GetFlag("flag_invalid_recipient_with_invite") - flag_api_error, _ := h.flagManager.GetFlag("flag_api_call_error") recipient := string(input) @@ -1149,21 +1155,32 @@ func (h *MenuHandlers) ValidateRecipient(ctx context.Context, sym string, input } case "alias": - // Call the API to validate and retrieve the address for the alias - r, aliasErr := h.accountService.CheckAliasAddress(ctx, recipient) - if aliasErr != nil { - res.FlagSet = append(res.FlagSet, flag_api_error) - res.Content = recipient - - logg.ErrorCtxf(ctx, "failed on CheckAliasAddress", "error", aliasErr) - return res, err + if strings.Contains(recipient, ".") { + AliasAddress, err = h.accountService.CheckAliasAddress(ctx, recipient) + if err == nil { + AliasAddressResult = AliasAddress.Address + } + } else { + //Perform a search for each search domain,break on first match + for _, domain := range config.SearchDomains() { + fqdn := fmt.Sprintf("%s.%s", recipient, domain) + AliasAddress, err = h.accountService.CheckAliasAddress(ctx, fqdn) + if err == nil { + AliasAddressResult = AliasAddress.Address + continue + } + } } - - // Alias validation succeeded, save the Ethereum address - err = store.WriteEntry(ctx, sessionId, storedb.DATA_RECIPIENT, []byte(r.Address)) - if err != nil { - logg.ErrorCtxf(ctx, "failed to write recipient entry with", "key", storedb.DATA_RECIPIENT, "value", r.Address, "error", err) - return res, err + if AliasAddressResult == "" { + res.Content = recipient + res.FlagSet = append(res.FlagSet, flag_invalid_recipient) + return res, nil + } else { + err = store.WriteEntry(ctx, sessionId, storedb.DATA_RECIPIENT, []byte(AliasAddressResult)) + if err != nil { + logg.ErrorCtxf(ctx, "failed to write recipient entry with", "key", storedb.DATA_RECIPIENT, "value", AliasAddressResult, "error", err) + return res, err + } } } } @@ -1889,7 +1906,6 @@ func (h *MenuHandlers) GetVoucherDetails(ctx context.Context, sym string, input if !ok { return res, fmt.Errorf("missing session") } - flag_api_error, _ := h.flagManager.GetFlag("flag_api_call_error") // get the active address @@ -2134,6 +2150,10 @@ func (h *MenuHandlers) UpdateAllProfileItems(ctx context.Context, sym string, in if err != nil { return res, err } + err = h.constructAccountAlias(ctx) + if err != nil { + return res, err + } return res, nil } @@ -2218,3 +2238,42 @@ func (h *MenuHandlers) persistLanguageCode(ctx context.Context, code string) err } return h.persistInitialLanguageCode(ctx, sessionId, code) } + +func (h *MenuHandlers) constructAccountAlias(ctx context.Context) error { + var alias string + store := h.userdataStore + sessionId, ok := ctx.Value("SessionId").(string) + if !ok { + return fmt.Errorf("missing session") + } + firstName, err := store.ReadEntry(ctx, sessionId, storedb.DATA_FIRST_NAME) + if err != nil { + return err + } + familyName, err := store.ReadEntry(ctx, sessionId, storedb.DATA_FAMILY_NAME) + if err != nil { + return err + } + pubKey, err := store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY) + if err != nil { + return err + } + aliasInput := fmt.Sprintf("%s%s", firstName, familyName) + aliasResult, err := h.accountService.RequestAlias(ctx, string(pubKey), aliasInput) + if err != nil { + return fmt.Errorf("Failed to retrieve alias: %s", err.Error()) + } + if _, ok := h.accountService.(*dev.DevAccountService); ok { + //If using local dev api,append sarafu.local to the assigned available alias + alias = aliasResult.Alias + ".sarafu.local" + } else { + alias = aliasResult.Alias + ".sarafu.eth" + } + //Store the alias + err = store.WriteEntry(ctx, sessionId, storedb.DATA_ACCOUNT_ALIAS, []byte(alias)) + if err != nil { + logg.ErrorCtxf(ctx, "failed to write account alias", "key", storedb.DATA_ACCOUNT_ALIAS, "value", alias, "error", err) + return err + } + return nil +} From 66be350ad18ea8b5d550db80dd2d83196bc1620c Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Tue, 21 Jan 2025 12:48:17 +0300 Subject: [PATCH 05/22] remove accountservice implementation check --- handlers/application/menuhandler.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 0b99f7a..9920c8b 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -24,7 +24,6 @@ import ( "git.grassecon.net/grassrootseconomics/common/person" "git.grassecon.net/grassrootseconomics/common/phone" "git.grassecon.net/grassrootseconomics/common/pin" - "git.grassecon.net/grassrootseconomics/sarafu-api/dev" "git.grassecon.net/grassrootseconomics/sarafu-api/models" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" "git.grassecon.net/grassrootseconomics/sarafu-vise/config" @@ -2257,12 +2256,7 @@ func (h *MenuHandlers) constructAccountAlias(ctx context.Context) error { if err != nil { return fmt.Errorf("Failed to retrieve alias: %s", err.Error()) } - if _, ok := h.accountService.(*dev.DevAccountService); ok { - //If using local dev api,append sarafu.local to the assigned available alias - alias = aliasResult.Alias + ".sarafu.local" - } else { - alias = aliasResult.Alias + ".sarafu.eth" - } + alias = aliasResult.Alias //Store the alias err = store.WriteEntry(ctx, sessionId, storedb.DATA_ACCOUNT_ALIAS, []byte(alias)) if err != nil { From ec6b078de3cbbf601bee0a4c04c110455e92a324 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Tue, 21 Jan 2025 15:23:21 +0300 Subject: [PATCH 06/22] fix: import config and model packages --- handlers/application/menuhandler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 5811246..b40dd07 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -23,7 +23,9 @@ import ( "git.grassecon.net/grassrootseconomics/common/person" "git.grassecon.net/grassrootseconomics/common/phone" "git.grassecon.net/grassrootseconomics/common/pin" + "git.grassecon.net/grassrootseconomics/sarafu-api/models" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" "git.grassecon.net/grassrootseconomics/sarafu-vise/profile" "git.grassecon.net/grassrootseconomics/sarafu-vise/store" storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" From 1249e45d546c33f158ea1d4f5e1a679fda04663c Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Thu, 23 Jan 2025 11:22:34 +0300 Subject: [PATCH 07/22] remove unused New conn argument --- services/remote.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/remote.go b/services/remote.go index e639e24..517d67d 100644 --- a/services/remote.go +++ b/services/remote.go @@ -11,6 +11,6 @@ import ( "git.grassecon.net/grassrootseconomics/visedriver/storage" ) -func New(ctx context.Context, storageService storage.StorageService, conn storage.ConnData) remote.AccountService { +func New(ctx context.Context, storageService storage.StorageService) remote.AccountService { return &httpremote.HTTPAccountService{} } From d7c909f02817cbc8612d468f9628d0e213c28171 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 07:58:03 +0300 Subject: [PATCH 08/22] update sarafu-api dep --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 4fb3c50..e8e2c76 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.23.4 require ( git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d - git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 + git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 github.com/alecthomas/assert/v2 v2.2.2 diff --git a/go.sum b/go.sum index f3aa2bb..6ae2792 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 h1:deGnqf4YCsbxhXgjFEjYjTUCvciLEmI26T9IysRsQXY= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805/go.mod h1:9bc3d//Qqm11hz7GYRdQc1Uan+0GJIOpvRBbv8cHMu8= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 h1:BJHfokTHzrw9QjQ+4s2HmSER0iBPuE7byW5oQC2zLIQ= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1/go.mod h1:gOn89ipaDcDvmQXRMQYKUqcw/sJcwVOPVt2eC6Geip8= git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 h1:ON77G5K0JNuwPb5JT/hRfF6G6+xstlBQgEIEzWydnhg= git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 h1:VoBmqsjlRdz+IPbtKsAkc1IrMepjR+QlesZT31Jokrk= From 18e865ba269e4176302f8cbc41fcaee755ad2940 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 07:59:33 +0300 Subject: [PATCH 09/22] set UseApi and storageservice to HttpAccountService --- services/remote.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/remote.go b/services/remote.go index 517d67d..baad08f 100644 --- a/services/remote.go +++ b/services/remote.go @@ -12,5 +12,8 @@ import ( ) func New(ctx context.Context, storageService storage.StorageService) remote.AccountService { - return &httpremote.HTTPAccountService{} + return &httpremote.HTTPAccountService{ + SS: storageService, + UseApi: false, + } } From 73b876dbdd375c87f748730493e7230d6755d378 Mon Sep 17 00:00:00 2001 From: Mohammed Sohail Date: Fri, 24 Jan 2025 09:25:09 +0300 Subject: [PATCH 10/22] ci/cd: add Dockerfile and GH builds --- .dockerignore | 16 ++++++++++ .github/workflows/docker.yaml | 56 +++++++++++++++++++++++++++++++++++ Dockerfile | 50 +++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker.yaml create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..eaf0570 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +/** +!/args +!/cmd/africastalking +!/cmd/ssh +!/config +!/debug +!/handlers +!/internal +!/profile +!/services +!/ssh +!/store +!/LICENSE +!/README.md +!/go.* +!/.env.example \ No newline at end of file diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 0000000..72b12d6 --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,56 @@ +name: release + +on: + push: + tags: + - "v*" + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Check out repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to GHCR Docker registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set outputs + run: | + echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV \ + && echo "RELEASE_SHORT_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + + - name: Build and push image + uses: docker/build-push-action@v2 + with: + context: ./ + file: ./Dockerfile + platforms: linux/amd64 + push: true + build-args: | + BUILD=${{ env.RELEASE_SHORT_COMMIT }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + tags: | + ghcr.io/grassrootseconomics/sarafu-vise:latest + ghcr.io/grassrootseconomics/sarafu-vise:${{ env.RELEASE_TAG }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..aebf0c3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,50 @@ +FROM golang:1.23.4-bookworm AS build + +ENV CGO_ENABLED=1 + +ARG BUILDPLATFORM +ARG TARGETPLATFORM +ARG BUILD=dev + +WORKDIR /build +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgdbm-dev \ + git \ + && rm -rf /var/lib/apt/lists/* +RUN git clone https://git.defalsify.org/vise.git go-vise +COPY . ./sarafu-vise + +WORKDIR /build/sarafu-vise/services/registration +RUN echo "Compiling go-vise files" +RUN make VISE_PATH=/build/go-vise -B + +WORKDIR /build/sarafu-vise +RUN echo "Building on $BUILDPLATFORM, building for $TARGETPLATFORM" +RUN go mod download +RUN go build -tags logtrace,online -o sarafu-ussd -ldflags="-X main.build=${BUILD} -s -w" cmd/africastalking/main.go +RUN go build -tags logtrace,online -o sarafu-ssh -ldflags="-X main.build=${BUILD} -s -w" cmd/ssh/main.go + +FROM debian:bookworm-slim + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgdbm-dev \ + ca-certificates \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /service + +COPY --from=build /build/sarafu-vise/sarafu-ussd . +COPY --from=build /build/sarafu-vise/sarafu-ssh . +COPY --from=build /build/sarafu-vise/LICENSE . +COPY --from=build /build/sarafu-vise/README.md . +COPY --from=build /build/sarafu-vise/services ./services +COPY --from=build /build/sarafu-vise/.env.example . +RUN mv .env.example .env + +EXPOSE 7123 +EXPOSE 7122 + +CMD ["./sarafu-ussd"] From f1c4d5f1f90c73c28e718d920e79821985b70508 Mon Sep 17 00:00:00 2001 From: Mohammed Sohail Date: Fri, 24 Jan 2025 09:26:00 +0300 Subject: [PATCH 11/22] docker: change bin name -> sarafu-at --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index aebf0c3..191bc33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ RUN make VISE_PATH=/build/go-vise -B WORKDIR /build/sarafu-vise RUN echo "Building on $BUILDPLATFORM, building for $TARGETPLATFORM" RUN go mod download -RUN go build -tags logtrace,online -o sarafu-ussd -ldflags="-X main.build=${BUILD} -s -w" cmd/africastalking/main.go +RUN go build -tags logtrace,online -o sarafu-at -ldflags="-X main.build=${BUILD} -s -w" cmd/africastalking/main.go RUN go build -tags logtrace,online -o sarafu-ssh -ldflags="-X main.build=${BUILD} -s -w" cmd/ssh/main.go FROM debian:bookworm-slim @@ -36,7 +36,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ WORKDIR /service -COPY --from=build /build/sarafu-vise/sarafu-ussd . +COPY --from=build /build/sarafu-vise/sarafu-at . COPY --from=build /build/sarafu-vise/sarafu-ssh . COPY --from=build /build/sarafu-vise/LICENSE . COPY --from=build /build/sarafu-vise/README.md . @@ -47,4 +47,4 @@ RUN mv .env.example .env EXPOSE 7123 EXPOSE 7122 -CMD ["./sarafu-ussd"] +CMD ["./sarafu-at"] From b6161da7498346e4a95a37ef49f41289744259f7 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 09:32:21 +0300 Subject: [PATCH 12/22] fix failing test --- handlers/application/menuhandler_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 0d3b9ef..75bbe88 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -1679,7 +1679,7 @@ func TestValidateRecipient(t *testing.T) { }, { name: "Test with alias recepient", - input: []byte("alias123"), + input: []byte("alias123.sarafu.local"), expectedResult: resource.Result{}, }, } From 0d4be0f7fcbe05b39cdc675f7b082ebf149ee063 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 10:12:28 +0300 Subject: [PATCH 13/22] return nil when error is key not found --- handlers/application/menuhandler.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index d4aed55..777c805 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -2268,14 +2268,23 @@ func (h *MenuHandlers) constructAccountAlias(ctx context.Context) error { } firstName, err := store.ReadEntry(ctx, sessionId, storedb.DATA_FIRST_NAME) if err != nil { + if db.IsNotFound(err) { + return nil + } return err } familyName, err := store.ReadEntry(ctx, sessionId, storedb.DATA_FAMILY_NAME) if err != nil { + if db.IsNotFound(err) { + return nil + } return err } pubKey, err := store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY) if err != nil { + if db.IsNotFound(err) { + return nil + } return err } aliasInput := fmt.Sprintf("%s%s", firstName, familyName) From 5f1a65978943c70d357e798c3440760bacece0d1 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 11:41:00 +0300 Subject: [PATCH 14/22] request alias on initial profile setup --- handlers/application/menuhandler.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 777c805..f4b144a 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -1165,6 +1165,10 @@ func (h *MenuHandlers) UpdateAllProfileItems(ctx context.Context, sym string, in if err != nil { return res, err } + err = h.constructAccountAlias(ctx) + if err != nil { + return res, err + } return res, nil } From c8ddafcf66a015032e3ce94f382de328f3f4a0a7 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 11:41:25 +0300 Subject: [PATCH 15/22] run go mod tidy --- go.sum | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.sum b/go.sum index 6ae2792..1ed7e57 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,6 @@ git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 h1:sPcqXQcywxA8W git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ= git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= -git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 h1:deGnqf4YCsbxhXgjFEjYjTUCvciLEmI26T9IysRsQXY= -git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805/go.mod h1:9bc3d//Qqm11hz7GYRdQc1Uan+0GJIOpvRBbv8cHMu8= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 h1:BJHfokTHzrw9QjQ+4s2HmSER0iBPuE7byW5oQC2zLIQ= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1/go.mod h1:gOn89ipaDcDvmQXRMQYKUqcw/sJcwVOPVt2eC6Geip8= git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 h1:ON77G5K0JNuwPb5JT/hRfF6G6+xstlBQgEIEzWydnhg= From 9a094f440f866ab58a41bfe4fd66e2d75cd56b07 Mon Sep 17 00:00:00 2001 From: lash Date: Fri, 24 Jan 2025 08:47:23 +0000 Subject: [PATCH 16/22] Avoid overwrite of env configs --- config/args.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/args.go b/config/args.go index 82f7c4c..67e0528 100644 --- a/config/args.go +++ b/config/args.go @@ -23,6 +23,18 @@ func NewOverride() *viseconfig.Override { } func Apply(o *viseconfig.Override) error { + if *o.DbConn == "?" { + o.DbConn = nil + } + if *o.ResourceConn == "?" { + o.ResourceConn = nil + } + if *o.UserConn == "?" { + o.UserConn = nil + } + if *o.StateConn == "?" { + o.StateConn = nil + } viseconfig.ApplyConn(o) return nil } From fbaba15776ad20f0831a88430ab42cc1f02764bc Mon Sep 17 00:00:00 2001 From: lash Date: Fri, 24 Jan 2025 10:15:37 +0000 Subject: [PATCH 17/22] Adapt override to non-pointer values --- cmd/africastalking/main.go | 14 ++++---------- cmd/async/main.go | 14 ++++---------- cmd/http/main.go | 14 ++++---------- cmd/main.go | 8 ++++---- cmd/ssh/main.go | 9 +++++---- config/args.go | 20 -------------------- devtools/admin/main.go | 14 ++++---------- devtools/store/dump/main.go | 14 ++++---------- go.mod | 4 ++-- go.sum | 8 ++++---- testutil/fsdb.go | 4 ++-- testutil/gdbmdb.go | 4 ++-- 12 files changed, 39 insertions(+), 88 deletions(-) diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index 1d24358..2975d03 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -44,14 +44,12 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string flag.BoolVar(&engineDebug, "d", false, "use engine debug output") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.Host(), "http host") flag.UintVar(&port, "p", config.Port(), "http port") @@ -59,10 +57,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/async/main.go b/cmd/async/main.go index 9feac12..a55a19b 100644 --- a/cmd/async/main.go +++ b/cmd/async/main.go @@ -53,14 +53,12 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") @@ -70,10 +68,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/http/main.go b/cmd/http/main.go index ec4b95b..e691254 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -43,13 +43,11 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") @@ -59,10 +57,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/main.go b/cmd/main.go index 7f83863..360f8af 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -38,10 +38,10 @@ func main() { var langs args.LangVar flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory") diff --git a/cmd/ssh/main.go b/cmd/ssh/main.go index 86bcf4b..d3afbb0 100644 --- a/cmd/ssh/main.go +++ b/cmd/ssh/main.go @@ -38,10 +38,11 @@ func main() { var stateDebug bool var host string var port uint - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource connection string") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.HostSSH(), "socket host") diff --git a/config/args.go b/config/args.go index 67e0528..20f80bf 100644 --- a/config/args.go +++ b/config/args.go @@ -6,35 +6,15 @@ import ( ) func NewOverride() *viseconfig.Override { - var a string - var b string - var c string - var d string o := &viseconfig.Override{ - DbConn: &a, - StateConn: &b, StateConnMode: storage.DBMODE_TEXT, - ResourceConn: &c, ResourceConnMode: storage.DBMODE_TEXT, - UserConn: &d, UserConnMode: storage.DBMODE_BINARY, } return o } func Apply(o *viseconfig.Override) error { - if *o.DbConn == "?" { - o.DbConn = nil - } - if *o.ResourceConn == "?" { - o.ResourceConn = nil - } - if *o.UserConn == "?" { - o.UserConn = nil - } - if *o.StateConn == "?" { - o.StateConn = nil - } viseconfig.ApplyConn(o) return nil } diff --git a/devtools/admin/main.go b/devtools/admin/main.go index 4e93ce8..3ae40b6 100644 --- a/devtools/admin/main.go +++ b/devtools/admin/main.go @@ -25,21 +25,15 @@ func main() { override := config.NewOverride() var sessionId string - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index f58efce..6844a22 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -38,21 +38,15 @@ func main() { var engineDebug bool var err error var first bool - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/go.mod b/go.mod index 4fb3c50..4171c44 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.23.4 require ( git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d - git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 - git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 + git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 + git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 github.com/alecthomas/assert/v2 v2.2.2 github.com/gofrs/uuid v4.4.0+incompatible diff --git a/go.sum b/go.sum index f3aa2bb..c4ef475 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 h1:sPcqXQcywxA8W git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ= git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= -git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 h1:deGnqf4YCsbxhXgjFEjYjTUCvciLEmI26T9IysRsQXY= -git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805/go.mod h1:9bc3d//Qqm11hz7GYRdQc1Uan+0GJIOpvRBbv8cHMu8= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 h1:ON77G5K0JNuwPb5JT/hRfF6G6+xstlBQgEIEzWydnhg= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 h1:BJHfokTHzrw9QjQ+4s2HmSER0iBPuE7byW5oQC2zLIQ= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1/go.mod h1:gOn89ipaDcDvmQXRMQYKUqcw/sJcwVOPVt2eC6Geip8= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa h1:yQLKwby3eD/zNjNw/INU5lGiLuWPEHdsgASwMA4UptE= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 h1:VoBmqsjlRdz+IPbtKsAkc1IrMepjR+QlesZT31Jokrk= git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84/go.mod h1:DpibtYpnT3nG4Kn556hRAkdu4+CtiI/6MbnQHal51mQ= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= diff --git a/testutil/fsdb.go b/testutil/fsdb.go index 7482bd0..9c7045c 100644 --- a/testutil/fsdb.go +++ b/testutil/fsdb.go @@ -16,10 +16,10 @@ func init() { if err != nil { panic(err) } - override.StateConn = &stateDir + override.StateConn = stateDir userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-fs-user-") if err != nil { panic(err) } - override.UserConn = &userDir + override.UserConn = userDir } diff --git a/testutil/gdbmdb.go b/testutil/gdbmdb.go index 09e7dd5..158c187 100644 --- a/testutil/gdbmdb.go +++ b/testutil/gdbmdb.go @@ -21,7 +21,7 @@ func init() { if err != nil { panic(err) } - override.StateConn = &stateDir + override.StateConn = stateDir userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-gdbm-user-") if err != nil { panic(err) @@ -30,5 +30,5 @@ func init() { if err != nil { panic(err) } - override.UserConn = &userDir + override.UserConn = userDir } From 6f0994d692757978ed34ae5a680fbe7df0e20d1e Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 14:42:30 +0300 Subject: [PATCH 18/22] feat: show alias as part of the profile information --- handlers/application/menuhandler.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index f4b144a..53ada39 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -1082,6 +1082,11 @@ func (h *MenuHandlers) GetProfileInfo(ctx context.Context, sym string, input []b gender := getEntryOrDefault(store.ReadEntry(ctx, sessionId, storedb.DATA_GENDER)) location := getEntryOrDefault(store.ReadEntry(ctx, sessionId, storedb.DATA_LOCATION)) offerings := getEntryOrDefault(store.ReadEntry(ctx, sessionId, storedb.DATA_OFFERINGS)) + alias := getEntryOrDefault(store.ReadEntry(ctx, sessionId, storedb.DATA_ACCOUNT_ALIAS)) + + if alias != defaultValue { + alias = strings.Split(alias, ".")[0] + } // Construct the full name name := person.ConstructName(firstName, familyName, defaultValue) @@ -1098,18 +1103,18 @@ func (h *MenuHandlers) GetProfileInfo(ctx context.Context, sym string, input []b switch language.Code { case "eng": res.Content = fmt.Sprintf( - "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", - name, gender, age, location, offerings, + "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\nYour alias: %s\n", + name, gender, age, location, offerings, alias, ) case "swa": res.Content = fmt.Sprintf( - "Jina: %s\nJinsia: %s\nUmri: %s\nEneo: %s\nUnauza: %s\n", - name, gender, age, location, offerings, + "Jina: %s\nJinsia: %s\nUmri: %s\nEneo: %s\nUnauza: %s\nLakabu yako: %s\n", + name, gender, age, location, offerings, alias, ) default: res.Content = fmt.Sprintf( - "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", - name, gender, age, location, offerings, + "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\nYour alias: %s\n", + name, gender, age, location, offerings, alias, ) } From cd37adc28802ac814cfac16e1740a03fe3d5172b Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 24 Jan 2025 14:42:41 +0300 Subject: [PATCH 19/22] update test --- handlers/application/menuhandler_test.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 75bbe88..3bf66a4 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -1797,37 +1797,37 @@ func TestGetProfile(t *testing.T) { }{ { name: "Test with full profile information in eng", - keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB}, - profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976"}, + keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB, storedb.DATA_ACCOUNT_ALIAS}, + profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976", "DoeJohn"}, languageCode: "eng", result: resource.Result{ Content: fmt.Sprintf( - "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", - "John Doee", "Male", "49", "Kilifi", "Bananas", + "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\nYour alias: %s\n", + "John Doee", "Male", "49", "Kilifi", "Bananas", "DoeJohn", ), }, }, { name: "Test with with profile information in swa", - keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB}, - profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976"}, + keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB, storedb.DATA_ACCOUNT_ALIAS}, + profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976", "DoeJohn"}, languageCode: "swa", result: resource.Result{ Content: fmt.Sprintf( - "Jina: %s\nJinsia: %s\nUmri: %s\nEneo: %s\nUnauza: %s\n", - "John Doee", "Male", "49", "Kilifi", "Bananas", + "Jina: %s\nJinsia: %s\nUmri: %s\nEneo: %s\nUnauza: %s\nLakabu yako: %s\n", + "John Doee", "Male", "49", "Kilifi", "Bananas", "DoeJohn", ), }, }, { name: "Test with with profile information with language that is not yet supported", - keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB}, - profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976"}, + keys: []storedb.DataTyp{storedb.DATA_FAMILY_NAME, storedb.DATA_FIRST_NAME, storedb.DATA_GENDER, storedb.DATA_OFFERINGS, storedb.DATA_LOCATION, storedb.DATA_YOB, storedb.DATA_ACCOUNT_ALIAS}, + profileInfo: []string{"Doee", "John", "Male", "Bananas", "Kilifi", "1976", "DoeJohn"}, languageCode: "nor", result: resource.Result{ Content: fmt.Sprintf( - "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", - "John Doee", "Male", "49", "Kilifi", "Bananas", + "Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\nYour alias: %s\n", + "John Doee", "Male", "49", "Kilifi", "Bananas", "DoeJohn", ), }, }, From f3a6485bb3953ab7d8e324ce971c0051fc423273 Mon Sep 17 00:00:00 2001 From: lash Date: Fri, 24 Jan 2025 08:47:23 +0000 Subject: [PATCH 20/22] Avoid overwrite of env configs --- config/args.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/args.go b/config/args.go index 82f7c4c..67e0528 100644 --- a/config/args.go +++ b/config/args.go @@ -23,6 +23,18 @@ func NewOverride() *viseconfig.Override { } func Apply(o *viseconfig.Override) error { + if *o.DbConn == "?" { + o.DbConn = nil + } + if *o.ResourceConn == "?" { + o.ResourceConn = nil + } + if *o.UserConn == "?" { + o.UserConn = nil + } + if *o.StateConn == "?" { + o.StateConn = nil + } viseconfig.ApplyConn(o) return nil } From 4d1045a9f91bb278bb5a10d0a30780a1b488400e Mon Sep 17 00:00:00 2001 From: lash Date: Fri, 24 Jan 2025 10:15:37 +0000 Subject: [PATCH 21/22] Adapt override to non-pointer values --- cmd/africastalking/main.go | 14 ++++---------- cmd/async/main.go | 14 ++++---------- cmd/http/main.go | 14 ++++---------- cmd/main.go | 8 ++++---- cmd/ssh/main.go | 9 +++++---- config/args.go | 20 -------------------- devtools/admin/main.go | 14 ++++---------- devtools/store/dump/main.go | 14 ++++---------- go.mod | 2 +- go.sum | 4 ++-- testutil/fsdb.go | 4 ++-- testutil/gdbmdb.go | 4 ++-- 12 files changed, 36 insertions(+), 85 deletions(-) diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index 1d24358..2975d03 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -44,14 +44,12 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string flag.BoolVar(&engineDebug, "d", false, "use engine debug output") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.Host(), "http host") flag.UintVar(&port, "p", config.Port(), "http port") @@ -59,10 +57,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/async/main.go b/cmd/async/main.go index 9feac12..a55a19b 100644 --- a/cmd/async/main.go +++ b/cmd/async/main.go @@ -53,14 +53,12 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") @@ -70,10 +68,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/http/main.go b/cmd/http/main.go index ec4b95b..e691254 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -43,13 +43,11 @@ func main() { var err error var gettextDir string var langs args.LangVar - var resourceDir string - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") @@ -59,10 +57,6 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/cmd/main.go b/cmd/main.go index 7f83863..360f8af 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -38,10 +38,10 @@ func main() { var langs args.LangVar flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory") diff --git a/cmd/ssh/main.go b/cmd/ssh/main.go index 86bcf4b..d3afbb0 100644 --- a/cmd/ssh/main.go +++ b/cmd/ssh/main.go @@ -38,10 +38,11 @@ func main() { var stateDebug bool var host string var port uint - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource connection string") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.HostSSH(), "socket host") diff --git a/config/args.go b/config/args.go index 67e0528..20f80bf 100644 --- a/config/args.go +++ b/config/args.go @@ -6,35 +6,15 @@ import ( ) func NewOverride() *viseconfig.Override { - var a string - var b string - var c string - var d string o := &viseconfig.Override{ - DbConn: &a, - StateConn: &b, StateConnMode: storage.DBMODE_TEXT, - ResourceConn: &c, ResourceConnMode: storage.DBMODE_TEXT, - UserConn: &d, UserConnMode: storage.DBMODE_BINARY, } return o } func Apply(o *viseconfig.Override) error { - if *o.DbConn == "?" { - o.DbConn = nil - } - if *o.ResourceConn == "?" { - o.ResourceConn = nil - } - if *o.UserConn == "?" { - o.UserConn = nil - } - if *o.StateConn == "?" { - o.StateConn = nil - } viseconfig.ApplyConn(o) return nil } diff --git a/devtools/admin/main.go b/devtools/admin/main.go index 4e93ce8..3ae40b6 100644 --- a/devtools/admin/main.go +++ b/devtools/admin/main.go @@ -25,21 +25,15 @@ func main() { override := config.NewOverride() var sessionId string - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index f58efce..6844a22 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -38,21 +38,15 @@ func main() { var engineDebug bool var err error var first bool - var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") - flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") - flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") - flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") - flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.StringVar(&override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(&override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(&override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if resourceDir != "" { - *override.ResourceConn = resourceDir - override.ResourceConnMode = storage.DBMODE_TEXT - } config.Apply(override) conns, err := config.GetConns() if err != nil { diff --git a/go.mod b/go.mod index e8e2c76..4171c44 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 - git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 + git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 github.com/alecthomas/assert/v2 v2.2.2 github.com/gofrs/uuid v4.4.0+incompatible diff --git a/go.sum b/go.sum index 1ed7e57..c4ef475 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1 h1:BJHfokTHzrw9QjQ+4s2HmSER0iBPuE7byW5oQC2zLIQ= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250123142805-2181388f5bf1/go.mod h1:gOn89ipaDcDvmQXRMQYKUqcw/sJcwVOPVt2eC6Geip8= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 h1:ON77G5K0JNuwPb5JT/hRfF6G6+xstlBQgEIEzWydnhg= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa h1:yQLKwby3eD/zNjNw/INU5lGiLuWPEHdsgASwMA4UptE= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250124100946-03d19283f6fa/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 h1:VoBmqsjlRdz+IPbtKsAkc1IrMepjR+QlesZT31Jokrk= git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84/go.mod h1:DpibtYpnT3nG4Kn556hRAkdu4+CtiI/6MbnQHal51mQ= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= diff --git a/testutil/fsdb.go b/testutil/fsdb.go index 7482bd0..9c7045c 100644 --- a/testutil/fsdb.go +++ b/testutil/fsdb.go @@ -16,10 +16,10 @@ func init() { if err != nil { panic(err) } - override.StateConn = &stateDir + override.StateConn = stateDir userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-fs-user-") if err != nil { panic(err) } - override.UserConn = &userDir + override.UserConn = userDir } diff --git a/testutil/gdbmdb.go b/testutil/gdbmdb.go index 09e7dd5..158c187 100644 --- a/testutil/gdbmdb.go +++ b/testutil/gdbmdb.go @@ -21,7 +21,7 @@ func init() { if err != nil { panic(err) } - override.StateConn = &stateDir + override.StateConn = stateDir userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-gdbm-user-") if err != nil { panic(err) @@ -30,5 +30,5 @@ func init() { if err != nil { panic(err) } - override.UserConn = &userDir + override.UserConn = userDir } From 363c35efed0867d9494a84c1c1a376253be32786 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Sat, 25 Jan 2025 09:54:44 +0300 Subject: [PATCH 22/22] update test data file --- menutraversal_test/group_test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menutraversal_test/group_test.json b/menutraversal_test/group_test.json index 0ffb49f..635e91d 100644 --- a/menutraversal_test/group_test.json +++ b/menutraversal_test/group_test.json @@ -427,7 +427,7 @@ }, { "input": "1234", - "expectedContent": "My profile:\nName: foo bar\nGender: male\nAge: 80\nLocation: Kilifi\nYou provide: Bananas\n\n0:Back\n9:Quit" + "expectedContent": "My profile:\nName: foo bar\nGender: male\nAge: 80\nLocation: Kilifi\nYou provide: Bananas\nYour alias: \n\n0:Back\n9:Quit" }, { "input": "0",