From d5dc792dceef121084196ec76a5ddcc13d5da961 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 24 Feb 2025 14:45:45 +0300 Subject: [PATCH 1/8] add alias ens endpoint --- config/config.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/config.go b/config/config.go index 6ebb5bc..f24526c 100644 --- a/config/config.go +++ b/config/config.go @@ -16,12 +16,14 @@ const ( voucherTransfersPathPrefix = "/api/v1/transfers/last10" voucherDataPathPrefix = "/api/v1/token" AliasPrefix = "api/v1/alias" + AliasEnsPrefix = "/api/v1/bypass" ) var ( custodialURLBase string dataURLBase string BearerToken string + aliasEnsURLBase string ) var ( @@ -34,6 +36,7 @@ var ( VoucherTransfersURL string VoucherDataURL string CheckAliasURL string + AliasEnsURL string ) func setBase() error { @@ -41,6 +44,7 @@ func setBase() error { custodialURLBase = env.GetEnv("CUSTODIAL_URL_BASE", "http://localhost:5003") dataURLBase = env.GetEnv("DATA_URL_BASE", "http://localhost:5006") + aliasEnsURLBase = env.GetEnv("ALIAS_ENS_BASE", "http://localhost:5015") BearerToken = env.GetEnv("BEARER_TOKEN", "") _, err = url.Parse(custodialURLBase) @@ -69,5 +73,6 @@ func LoadConfig() error { VoucherTransfersURL, _ = url.JoinPath(dataURLBase, voucherTransfersPathPrefix) VoucherDataURL, _ = url.JoinPath(dataURLBase, voucherDataPathPrefix) CheckAliasURL, _ = url.JoinPath(dataURLBase, AliasPrefix) + AliasEnsURL, _ = url.JoinPath(aliasEnsURLBase, AliasEnsPrefix) return nil } From e64eb265a5f0a9301c4d49b271e37f9604461f83 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 24 Feb 2025 14:48:00 +0300 Subject: [PATCH 2/8] add alias responses --- models/alias_response.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/models/alias_response.go b/models/alias_response.go index 295c9ef..0af8d6e 100644 --- a/models/alias_response.go +++ b/models/alias_response.go @@ -7,3 +7,13 @@ type RequestAliasResult struct { type AliasAddress struct { Address string } + +type AliasEnsResult struct { + Address string `json:"address"` + AutoChoose bool `json:"autoChoose"` + Name string `json:"name"` +} + +type AliasEnsAddressResult struct { + Address string `json:"address"` +} From 1f3ac220d1265c52c7031aad47f933b708c06a90 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 24 Feb 2025 14:49:58 +0300 Subject: [PATCH 3/8] feat: request and resolve aliases. --- remote/http/service.go | 65 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/remote/http/service.go b/remote/http/service.go index aca8ae0..a937870 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -225,27 +225,76 @@ func (as *HTTPAccountService) CheckAliasAddress(ctx context.Context, alias strin } func resolveAliasAddress(ctx context.Context, alias string) (*models.AliasAddress, error) { - var r models.AliasAddress + var ( + aliasEnsResult models.AliasEnsAddressResult + ) - ep, err := url.JoinPath(config.CheckAliasURL, alias) + ep, err := url.JoinPath(config.AliasEnsURL, "/resolve") if err != nil { return nil, err } - req, err := http.NewRequest("GET", ep, nil) + + u, err := url.Parse(ep) if err != nil { return nil, err } - _, err = doRequest(ctx, req, &r) - return &r, err + + query := u.Query() + query.Set("name", alias) + u.RawQuery = query.Encode() + + req, err := http.NewRequest("GET", u.String(), nil) + if err != nil { + return nil, err + } + _, err = doRequest(ctx, req, &aliasEnsResult) + if err != nil { + return nil, err + } + return &models.AliasAddress{Address: aliasEnsResult.Address}, err } -// TODO: Use actual custodial api to request available alias func (as *HTTPAccountService) RequestAlias(ctx context.Context, publicKey string, hint string) (*models.RequestAliasResult, error) { if as.SS == nil { return nil, fmt.Errorf("The storage service cannot be nil") } - svc := dev.NewDevAccountService(ctx, as.SS) - return svc.RequestAlias(ctx, publicKey, hint) + if as.UseApi { + enr, err := requestEnsAlias(ctx, publicKey, hint) + if err != nil { + return nil, err + } + return &models.RequestAliasResult{Alias: enr.Name}, nil + } else { + svc := dev.NewDevAccountService(ctx, as.SS) + return svc.RequestAlias(ctx, publicKey, hint) + } +} + +func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*models.AliasEnsResult, error) { + var r models.AliasEnsResult + + ep, err := url.JoinPath(config.AliasEnsURL, "/register") + if err != nil { + return nil, err + } + //Payload with the address and hint to derive an ENS name + payload := map[string]string{ + "address": publicKey, + "hint": hint, + } + payloadBytes, err := json.Marshal(payload) + if err != nil { + return nil, err + } + req, err := http.NewRequest("POST", ep, bytes.NewBuffer(payloadBytes)) + if err != nil { + return nil, err + } + _, err = doRequest(ctx, req, &r) + if err != nil { + return nil, err + } + return &r, nil } // TODO: remove eth-custodial api dependency From 9c8a3df971aef4b68171637bcb78f3bc68de3fdb Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 7 Mar 2025 09:45:09 +0300 Subject: [PATCH 4/8] add logs --- remote/http/service.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/remote/http/service.go b/remote/http/service.go index a937870..f9f31db 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -12,6 +12,7 @@ import ( "net/url" "regexp" + "git.defalsify.org/vise.git/logging" "git.grassecon.net/grassrootseconomics/sarafu-api/config" "git.grassecon.net/grassrootseconomics/sarafu-api/dev" "git.grassecon.net/grassrootseconomics/sarafu-api/models" @@ -22,6 +23,7 @@ import ( var ( aliasRegex = regexp.MustCompile("^\\+?[a-zA-Z0-9\\-_]+$") + logg = logging.NewVanilla().WithDomain("sarafu-api.devapi") ) type HTTPAccountService struct { @@ -277,6 +279,7 @@ func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*model if err != nil { return nil, err } + logg.InfoCtxf(ctx, "requesting alias", "endpoint", ep) //Payload with the address and hint to derive an ENS name payload := map[string]string{ "address": publicKey, @@ -294,6 +297,7 @@ func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*model if err != nil { return nil, err } + logg.InfoCtxf(ctx, "alias successfully assigned", "alias", r.Name) return &r, nil } From 4af0e9709dc24d6608c5d1f914ee7a9c83c55601 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 7 Mar 2025 16:04:15 +0300 Subject: [PATCH 5/8] fix: format alias to fqdn before request --- remote/http/service.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/remote/http/service.go b/remote/http/service.go index f9f31db..02333de 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -61,6 +61,10 @@ func (as *HTTPAccountService) TrackAccountStatus(ctx context.Context, publicKey return &r, nil } +func (as *HTTPAccountService) ToFqdn(alias string) string { + return alias + ".sarafu.eth" +} + // CheckBalance retrieves the balance for a given public key from the custodial balance API endpoint. // Parameters: // - publicKey: The public key associated with the account whose balance needs to be checked. @@ -220,6 +224,7 @@ func (as *HTTPAccountService) CheckAliasAddress(ctx context.Context, alias strin } svc := dev.NewDevAccountService(ctx, as.SS) if as.UseApi { + alias = as.ToFqdn(alias) return resolveAliasAddress(ctx, alias) } else { return svc.CheckAliasAddress(ctx, alias) @@ -261,6 +266,7 @@ func (as *HTTPAccountService) RequestAlias(ctx context.Context, publicKey string return nil, fmt.Errorf("The storage service cannot be nil") } if as.UseApi { + hint := as.ToFqdn(hint) enr, err := requestEnsAlias(ctx, publicKey, hint) if err != nil { return nil, err @@ -279,7 +285,7 @@ func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*model if err != nil { return nil, err } - logg.InfoCtxf(ctx, "requesting alias", "endpoint", ep) + logg.InfoCtxf(ctx, "requesting alias", "endpoint", ep, "hint", hint) //Payload with the address and hint to derive an ENS name payload := map[string]string{ "address": publicKey, @@ -293,6 +299,8 @@ func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*model if err != nil { return nil, err } + // Log the request body + logg.InfoCtxf(ctx, "request body", "payload", string(payloadBytes)) _, err = doRequest(ctx, req, &r) if err != nil { return nil, err From 6e437cb8e0336d01ad8a5f591a646d7d7aeacaf2 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Fri, 7 Mar 2025 16:10:40 +0300 Subject: [PATCH 6/8] feat: sanitize alias hint before resolving --- remote/http/service.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/remote/http/service.go b/remote/http/service.go index 02333de..fd87718 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -11,6 +11,7 @@ import ( "net/http" "net/url" "regexp" + "strings" "git.defalsify.org/vise.git/logging" "git.grassecon.net/grassrootseconomics/sarafu-api/config" @@ -266,7 +267,9 @@ func (as *HTTPAccountService) RequestAlias(ctx context.Context, publicKey string return nil, fmt.Errorf("The storage service cannot be nil") } if as.UseApi { - hint := as.ToFqdn(hint) + if !strings.Contains(hint, ".") { + hint = as.ToFqdn(hint) + } enr, err := requestEnsAlias(ctx, publicKey, hint) if err != nil { return nil, err From dda02852bf4687b2598f637157b17db009df1aa3 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 10 Mar 2025 11:49:49 +0300 Subject: [PATCH 7/8] add alias resolve logs --- remote/http/service.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/remote/http/service.go b/remote/http/service.go index fd87718..4d2b910 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -223,9 +223,14 @@ func (as *HTTPAccountService) CheckAliasAddress(ctx context.Context, alias strin if as.SS == nil { return nil, fmt.Errorf("The storage service cannot be nil") } + logg.InfoCtxf(ctx, "resolving alias before formatting", "alias", alias) svc := dev.NewDevAccountService(ctx, as.SS) if as.UseApi { + if !strings.Contains(alias, ".") { + alias = as.ToFqdn(alias) + } alias = as.ToFqdn(alias) + logg.InfoCtxf(ctx, "resolving alias to address", "alias", alias) return resolveAliasAddress(ctx, alias) } else { return svc.CheckAliasAddress(ctx, alias) From 8145b4bd004b8e46efa024c8dff9d7586766e3c3 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 10 Mar 2025 12:39:12 +0300 Subject: [PATCH 8/8] fix: remove formatting to fqdn --- remote/http/service.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/remote/http/service.go b/remote/http/service.go index 4d2b910..82a756e 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -226,10 +226,6 @@ func (as *HTTPAccountService) CheckAliasAddress(ctx context.Context, alias strin logg.InfoCtxf(ctx, "resolving alias before formatting", "alias", alias) svc := dev.NewDevAccountService(ctx, as.SS) if as.UseApi { - if !strings.Contains(alias, ".") { - alias = as.ToFqdn(alias) - } - alias = as.ToFqdn(alias) logg.InfoCtxf(ctx, "resolving alias to address", "alias", alias) return resolveAliasAddress(ctx, alias) } else {