profile-edit-show #171
							
								
								
									
										14
									
								
								.env.example
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								.env.example
									
									
									
									
									
								
							| @ -2,6 +2,9 @@ | |||||||
| PORT=7123 | PORT=7123 | ||||||
| HOST=127.0.0.1 | HOST=127.0.0.1 | ||||||
| 
 | 
 | ||||||
|  | #AfricasTalking USSD POST endpoint | ||||||
|  | AT_ENDPOINT=/ussd/africastalking | ||||||
|  | 
 | ||||||
| #PostgreSQL | #PostgreSQL | ||||||
| DB_HOST=localhost | DB_HOST=localhost | ||||||
| DB_USER=postgres | DB_USER=postgres | ||||||
| @ -12,10 +15,7 @@ DB_SSLMODE=disable | |||||||
| DB_TIMEZONE=Africa/Nairobi | DB_TIMEZONE=Africa/Nairobi | ||||||
| 
 | 
 | ||||||
| #External API Calls | #External API Calls | ||||||
| CREATE_ACCOUNT_URL=http://localhost:5003/api/v2/account/create | CUSTODIAL_URL_BASE=http://localhost:5003 | ||||||
| TRACK_STATUS_URL=https://custodial.sarafu.africa/api/track/ | CUSTODIAL_BEARER_TOKEN=eyJeSIsInRcCI6IkpXVCJ.yJwdWJsaWNLZXkiOiIwrrrrrr | ||||||
| BALANCE_URL=https://custodial.sarafu.africa/api/account/status/ | DATA_URL_BASE=http://localhost:5006 | ||||||
| TRACK_URL=http://localhost:5003/api/v2/account/status | DATA_BEARER_TOKEN=eyJeSIsIRcCI6IXVCJ.yJwdWJsaLZXkiOiIwrrrrrr | ||||||
| 
 |  | ||||||
| #AfricasTalking USSD POST endpoint |  | ||||||
| AT_ENDPOINT=/ussd/africastalking |  | ||||||
|  | |||||||
| @ -31,26 +31,10 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	logg        = logging.NewVanilla() | 	logg        = logging.NewVanilla() | ||||||
| 	scriptDir   = path.Join("services", "registration") | 	scriptDir   = path.Join("services", "registration") | ||||||
| 	InfoLogger  *log.Logger |  | ||||||
| 	ErrorLogger *log.Logger |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	initializers.LoadEnvVariables() | 	initializers.LoadEnvVariables() | ||||||
| 
 |  | ||||||
| 	logFile := "urdt-ussd-africastalking.log" |  | ||||||
| 
 |  | ||||||
| 	file, err := os.OpenFile(logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	InfoLogger = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 	ErrorLogger = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 
 |  | ||||||
| 	// Inject into remote package
 |  | ||||||
| 	remote.InfoLogger = InfoLogger |  | ||||||
| 	remote.ErrorLogger = ErrorLogger |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type atRequestParser struct{} | type atRequestParser struct{} | ||||||
| @ -58,14 +42,14 @@ type atRequestParser struct{} | |||||||
| func (arp *atRequestParser) GetSessionId(rq any) (string, error) { | func (arp *atRequestParser) GetSessionId(rq any) (string, error) { | ||||||
| 	rqv, ok := rq.(*http.Request) | 	rqv, ok := rq.(*http.Request) | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		ErrorLogger.Println("got an invalid request:", rq) | 		log.Println("got an invalid request:", rq) | ||||||
| 		return "", handlers.ErrInvalidRequest | 		return "", handlers.ErrInvalidRequest | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Capture body (if any) for logging
 | 	// Capture body (if any) for logging
 | ||||||
| 	body, err := io.ReadAll(rqv.Body) | 	body, err := io.ReadAll(rqv.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ErrorLogger.Println("failed to read request body:", err) | 		log.Println("failed to read request body:", err) | ||||||
| 		return "", fmt.Errorf("failed to read request body: %v", err) | 		return "", fmt.Errorf("failed to read request body: %v", err) | ||||||
| 	} | 	} | ||||||
| 	// Reset the body for further reading
 | 	// Reset the body for further reading
 | ||||||
| @ -75,13 +59,13 @@ func (arp *atRequestParser) GetSessionId(rq any) (string, error) { | |||||||
| 	bodyLog := map[string]string{"body": string(body)} | 	bodyLog := map[string]string{"body": string(body)} | ||||||
| 	logBytes, err := json.Marshal(bodyLog) | 	logBytes, err := json.Marshal(bodyLog) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ErrorLogger.Println("failed to marshal request body:", err) | 		log.Println("failed to marshal request body:", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		InfoLogger.Println("Received request:", string(logBytes)) | 		log.Println("Received request:", string(logBytes)) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := rqv.ParseForm(); err != nil { | 	if err := rqv.ParseForm(); err != nil { | ||||||
| 		ErrorLogger.Println("failed to parse form data: %v", err) | 		log.Println("failed to parse form data: %v", err) | ||||||
| 		return "", fmt.Errorf("failed to parse form data: %v", err) | 		return "", fmt.Errorf("failed to parse form data: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,7 +4,6 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"log" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"path" | 	"path" | ||||||
| @ -24,27 +23,12 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	logg      = logging.NewVanilla() | 	logg      = logging.NewVanilla() | ||||||
| 	scriptDir = path.Join("services", "registration") | 	scriptDir = path.Join("services", "registration") | ||||||
| 	InfoLogger    *log.Logger |  | ||||||
| 	ErrorLogger   *log.Logger |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	initializers.LoadEnvVariables() | 	initializers.LoadEnvVariables() | ||||||
| 
 |  | ||||||
| 	logFile := "urdt-ussd-async.log" |  | ||||||
| 
 |  | ||||||
| 	file, err := os.OpenFile(logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	InfoLogger = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 	ErrorLogger = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 
 |  | ||||||
| 	// Inject into remote package
 |  | ||||||
| 	remote.InfoLogger = InfoLogger |  | ||||||
| 	remote.ErrorLogger = ErrorLogger |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
| type asyncRequestParser struct { | type asyncRequestParser struct { | ||||||
| 	sessionId string | 	sessionId string | ||||||
| 	input     []byte | 	input     []byte | ||||||
|  | |||||||
| @ -4,7 +4,6 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"log" |  | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| @ -27,26 +26,10 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	logg      = logging.NewVanilla() | 	logg      = logging.NewVanilla() | ||||||
| 	scriptDir = path.Join("services", "registration") | 	scriptDir = path.Join("services", "registration") | ||||||
| 	InfoLogger    *log.Logger |  | ||||||
| 	ErrorLogger   *log.Logger |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	initializers.LoadEnvVariables() | 	initializers.LoadEnvVariables() | ||||||
| 
 |  | ||||||
| 	logFile := "urdt-ussd-http.log" |  | ||||||
| 
 |  | ||||||
| 	file, err := os.OpenFile(logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	InfoLogger = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 	ErrorLogger = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 
 |  | ||||||
| 	// Inject into remote package
 |  | ||||||
| 	remote.InfoLogger = InfoLogger |  | ||||||
| 	remote.ErrorLogger = ErrorLogger |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								cmd/main.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								cmd/main.go
									
									
									
									
									
								
							| @ -4,7 +4,6 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"log" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"path" | 	"path" | ||||||
| 
 | 
 | ||||||
| @ -21,26 +20,10 @@ import ( | |||||||
| var ( | var ( | ||||||
| 	logg      = logging.NewVanilla() | 	logg      = logging.NewVanilla() | ||||||
| 	scriptDir = path.Join("services", "registration") | 	scriptDir = path.Join("services", "registration") | ||||||
| 	InfoLogger    *log.Logger |  | ||||||
| 	ErrorLogger   *log.Logger |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	initializers.LoadEnvVariables() | 	initializers.LoadEnvVariables() | ||||||
| 
 |  | ||||||
| 	logFile := "urdt-ussd-cli.log" |  | ||||||
| 
 |  | ||||||
| 	file, err := os.OpenFile(logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	InfoLogger = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 	ErrorLogger = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| 
 |  | ||||||
| 	// Inject into remote package
 |  | ||||||
| 	remote.InfoLogger = InfoLogger |  | ||||||
| 	remote.ErrorLogger = ErrorLogger |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
|  | |||||||
| @ -135,7 +135,7 @@ func GetTemporaryVoucherData(ctx context.Context, store DataStore, sessionId str | |||||||
| 	return data, nil | 	return data, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdateVoucherData sets the active voucher data and clears the temporary voucher data in the DataStore.
 | // UpdateVoucherData sets the active voucher data in the DataStore.
 | ||||||
| func UpdateVoucherData(ctx context.Context, store DataStore, sessionId string, data *dataserviceapi.TokenHoldings) error { | func UpdateVoucherData(ctx context.Context, store DataStore, sessionId string, data *dataserviceapi.TokenHoldings) error { | ||||||
| 	logg.TraceCtxf(ctx, "dtal", "data", data) | 	logg.TraceCtxf(ctx, "dtal", "data", data) | ||||||
| 	// Active voucher data entries
 | 	// Active voucher data entries
 | ||||||
|  | |||||||
| @ -19,8 +19,8 @@ const ( | |||||||
| var ( | var ( | ||||||
| 	custodialURLBase     string | 	custodialURLBase     string | ||||||
| 	dataURLBase          string | 	dataURLBase          string | ||||||
| 	CustodialAPIKey string | 	CustodialBearerToken string | ||||||
| 	DataAPIKey string | 	DataBearerToken      string | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| @ -38,8 +38,8 @@ func setBase() error { | |||||||
| 
 | 
 | ||||||
| 	custodialURLBase = initializers.GetEnv("CUSTODIAL_URL_BASE", "http://localhost:5003") | 	custodialURLBase = initializers.GetEnv("CUSTODIAL_URL_BASE", "http://localhost:5003") | ||||||
| 	dataURLBase = initializers.GetEnv("DATA_URL_BASE", "http://localhost:5006") | 	dataURLBase = initializers.GetEnv("DATA_URL_BASE", "http://localhost:5006") | ||||||
| 	CustodialAPIKey = initializers.GetEnv("CUSTODIAL_API_KEY", "xd") | 	CustodialBearerToken = initializers.GetEnv("CUSTODIAL_BEARER_TOKEN", "") | ||||||
| 	DataAPIKey = initializers.GetEnv("DATA_API_KEY", "xd") | 	DataBearerToken = initializers.GetEnv("DATA_BEARER_TOKEN", "") | ||||||
| 
 | 
 | ||||||
| 	_, err = url.JoinPath(custodialURLBase, "/foo") | 	_, err = url.JoinPath(custodialURLBase, "/foo") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
| @ -161,6 +161,7 @@ func (h *Handlers) SetLanguage(ctx context.Context, sym string, input []byte) (r | |||||||
| 
 | 
 | ||||||
| 	languageSetFlag, err := h.flagManager.GetFlag("flag_language_set") | 	languageSetFlag, err := h.flagManager.GetFlag("flag_language_set") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "Error setting the languageSetFlag", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	res.FlagSet = append(res.FlagSet, languageSetFlag) | 	res.FlagSet = append(res.FlagSet, languageSetFlag) | ||||||
| @ -198,7 +199,6 @@ func (h *Handlers) createAccountNoExist(ctx context.Context, sessionId string, r | |||||||
| 	} | 	} | ||||||
| 	res.FlagSet = append(res.FlagSet, flag_account_created) | 	res.FlagSet = append(res.FlagSet, flag_account_created) | ||||||
| 	return nil | 	return nil | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // CreateAccount checks if any account exists on the JSON data file, and if not
 | // CreateAccount checks if any account exists on the JSON data file, and if not
 | ||||||
| @ -215,13 +215,15 @@ func (h *Handlers) CreateAccount(ctx context.Context, sym string, input []byte) | |||||||
| 	_, err = store.ReadEntry(ctx, sessionId, common.DATA_ACCOUNT_CREATED) | 	_, err = store.ReadEntry(ctx, sessionId, common.DATA_ACCOUNT_CREATED) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if db.IsNotFound(err) { | 		if db.IsNotFound(err) { | ||||||
| 			logg.Printf(logging.LVL_INFO, "Creating an account because it doesn't exist") | 			logg.InfoCtxf(ctx, "Creating an account because it doesn't exist") | ||||||
| 			err = h.createAccountNoExist(ctx, sessionId, &res) | 			err = h.createAccountNoExist(ctx, sessionId, &res) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				logg.ErrorCtxf(ctx, "failed on createAccountNoExist", "error", err) | ||||||
| 				return res, err | 				return res, err | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -235,10 +237,12 @@ func (h *Handlers) CheckPinMisMatch(ctx context.Context, sym string, input []byt | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	blockedNumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | 	blockedNumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read blockedNumber entry with", "key", common.DATA_BLOCKED_NUMBER, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	temporaryPin, err := store.ReadEntry(ctx, string(blockedNumber), common.DATA_TEMPORARY_VALUE) | 	temporaryPin, err := store.ReadEntry(ctx, string(blockedNumber), common.DATA_TEMPORARY_VALUE) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read temporaryPin entry with", "key", common.DATA_TEMPORARY_VALUE, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	if bytes.Equal(temporaryPin, input) { | 	if bytes.Equal(temporaryPin, input) { | ||||||
| @ -291,6 +295,7 @@ func (h *Handlers) SaveTemporaryPin(ctx context.Context, sym string, input []byt | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(accountPIN)) | 	err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(accountPIN)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to write temporaryAccountPIN entry with", "key", common.DATA_TEMPORARY_VALUE, "value", accountPIN, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -308,12 +313,14 @@ func (h *Handlers) SaveOthersTemporaryPin(ctx context.Context, sym string, input | |||||||
| 	} | 	} | ||||||
| 	temporaryPin := string(input) | 	temporaryPin := string(input) | ||||||
| 	blockedNumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | 	blockedNumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | ||||||
| 
 |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read blockedNumber entry with", "key", common.DATA_BLOCKED_NUMBER, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	err = store.WriteEntry(ctx, string(blockedNumber), common.DATA_TEMPORARY_VALUE, []byte(temporaryPin)) | 	err = store.WriteEntry(ctx, string(blockedNumber), common.DATA_TEMPORARY_VALUE, []byte(temporaryPin)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to write temporaryPin entry with", "key", common.DATA_TEMPORARY_VALUE, "value", temporaryPin, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -331,6 +338,7 @@ func (h *Handlers) ConfirmPinChange(ctx context.Context, sym string, input []byt | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	temporaryPin, err := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 	temporaryPin, err := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read temporaryPin entry with", "key", common.DATA_TEMPORARY_VALUE, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	if bytes.Equal(temporaryPin, input) { | 	if bytes.Equal(temporaryPin, input) { | ||||||
| @ -340,6 +348,7 @@ func (h *Handlers) ConfirmPinChange(ctx context.Context, sym string, input []byt | |||||||
| 	} | 	} | ||||||
| 	err = store.WriteEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | 	err = store.WriteEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to write temporaryPin entry with", "key", common.DATA_ACCOUNT_PIN, "value", temporaryPin, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	return res, nil | 	return res, nil | ||||||
| @ -362,6 +371,7 @@ func (h *Handlers) VerifyCreatePin(ctx context.Context, sym string, input []byte | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	temporaryPin, err := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 	temporaryPin, err := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read temporaryPin entry with", "key", common.DATA_TEMPORARY_VALUE, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	if bytes.Equal(input, temporaryPin) { | 	if bytes.Equal(input, temporaryPin) { | ||||||
| @ -374,6 +384,7 @@ func (h *Handlers) VerifyCreatePin(ctx context.Context, sym string, input []byte | |||||||
| 
 | 
 | ||||||
| 	err = store.WriteEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | 	err = store.WriteEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to write temporaryPin entry with", "key", common.DATA_ACCOUNT_PIN, "value", temporaryPin, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -406,11 +417,13 @@ func (h *Handlers) SaveFirstname(ctx context.Context, sym string, input []byte) | |||||||
| 		temporaryFirstName, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryFirstName, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_FIRST_NAME, []byte(temporaryFirstName)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_FIRST_NAME, []byte(temporaryFirstName)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write firstName entry with", "key", common.DATA_FIRST_NAME, "value", temporaryFirstName, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(firstName)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(firstName)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryFirstName entry with", "key", common.DATA_TEMPORARY_VALUE, "value", firstName, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -437,14 +450,17 @@ func (h *Handlers) SaveFamilyname(ctx context.Context, sym string, input []byte) | |||||||
| 		temporaryFamilyName, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryFamilyName, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_FAMILY_NAME, []byte(temporaryFamilyName)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_FAMILY_NAME, []byte(temporaryFamilyName)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write familyName entry with", "key", common.DATA_FAMILY_NAME, "value", temporaryFamilyName, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(familyName)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(familyName)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryFamilyName entry with", "key", common.DATA_TEMPORARY_VALUE, "value", familyName, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -465,11 +481,13 @@ func (h *Handlers) SaveYob(ctx context.Context, sym string, input []byte) (resou | |||||||
| 		temporaryYob, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryYob, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_YOB, []byte(temporaryYob)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_YOB, []byte(temporaryYob)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write yob entry with", "key", common.DATA_TEMPORARY_VALUE, "value", temporaryYob, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(yob)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(yob)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryYob entry with", "key", common.DATA_TEMPORARY_VALUE, "value", yob, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -495,11 +513,13 @@ func (h *Handlers) SaveLocation(ctx context.Context, sym string, input []byte) ( | |||||||
| 		temporaryLocation, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryLocation, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_LOCATION, []byte(temporaryLocation)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_LOCATION, []byte(temporaryLocation)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write location entry with", "key", common.DATA_LOCATION, "value", temporaryLocation, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(location)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(location)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryLocation entry with", "key", common.DATA_TEMPORARY_VALUE, "value", location, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -525,11 +545,13 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re | |||||||
| 		temporaryGender, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryGender, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_GENDER, []byte(temporaryGender)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_GENDER, []byte(temporaryGender)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write gender entry with", "key", common.DATA_GENDER, "value", gender, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(gender)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(gender)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryGender entry with", "key", common.DATA_TEMPORARY_VALUE, "value", gender, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -556,11 +578,13 @@ func (h *Handlers) SaveOfferings(ctx context.Context, sym string, input []byte) | |||||||
| 		temporaryOfferings, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | 		temporaryOfferings, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE) | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_OFFERINGS, []byte(temporaryOfferings)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_OFFERINGS, []byte(temporaryOfferings)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write offerings entry with", "key", common.DATA_TEMPORARY_VALUE, "value", offerings, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(offerings)) | 		err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(offerings)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to write temporaryOfferings entry with", "key", common.DATA_TEMPORARY_VALUE, "value", offerings, "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -571,9 +595,7 @@ func (h *Handlers) SaveOfferings(ctx context.Context, sym string, input []byte) | |||||||
| // ResetAllowUpdate resets the allowupdate flag that allows a user to update  profile data.
 | // ResetAllowUpdate resets the allowupdate flag that allows a user to update  profile data.
 | ||||||
| func (h *Handlers) ResetAllowUpdate(ctx context.Context, sym string, input []byte) (resource.Result, error) { | func (h *Handlers) ResetAllowUpdate(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
| 	var res resource.Result | 	var res resource.Result | ||||||
| 
 |  | ||||||
| 	flag_allow_update, _ := h.flagManager.GetFlag("flag_allow_update") | 	flag_allow_update, _ := h.flagManager.GetFlag("flag_allow_update") | ||||||
| 
 |  | ||||||
| 	res.FlagReset = append(res.FlagReset, flag_allow_update) | 	res.FlagReset = append(res.FlagReset, flag_allow_update) | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| @ -590,7 +612,6 @@ func (h *Handlers) ResetValidPin(ctx context.Context, sym string, input []byte) | |||||||
| func (h *Handlers) ResetAccountAuthorized(ctx context.Context, sym string, input []byte) (resource.Result, error) { | func (h *Handlers) ResetAccountAuthorized(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
| 	var res resource.Result | 	var res resource.Result | ||||||
| 	flag_account_authorized, _ := h.flagManager.GetFlag("flag_account_authorized") | 	flag_account_authorized, _ := h.flagManager.GetFlag("flag_account_authorized") | ||||||
| 
 |  | ||||||
| 	res.FlagReset = append(res.FlagReset, flag_account_authorized) | 	res.FlagReset = append(res.FlagReset, flag_account_authorized) | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| @ -626,6 +647,7 @@ func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (res | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	AccountPin, err := store.ReadEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN) | 	AccountPin, err := store.ReadEntry(ctx, sessionId, common.DATA_ACCOUNT_PIN) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read AccountPin entry with", "key", common.DATA_ACCOUNT_PIN, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	if len(input) == 4 { | 	if len(input) == 4 { | ||||||
| @ -673,18 +695,19 @@ func (h *Handlers) CheckAccountStatus(ctx context.Context, sym string, input []b | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", common.DATA_PUBLIC_KEY, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	r, err := h.accountService.TrackAccountStatus(ctx, string(publicKey)) |  | ||||||
| 
 | 
 | ||||||
|  | 	r, err := h.accountService.TrackAccountStatus(ctx, string(publicKey)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		res.FlagSet = append(res.FlagSet, flag_api_error) | 		res.FlagSet = append(res.FlagSet, flag_api_error) | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed on TrackAccountStatus", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	res.FlagReset = append(res.FlagReset, flag_api_error) | 	res.FlagReset = append(res.FlagReset, flag_api_error) | ||||||
| 	if !ok { | 
 | ||||||
| 		return res, err |  | ||||||
| 	} |  | ||||||
| 	if r.Active { | 	if r.Active { | ||||||
| 		res.FlagSet = append(res.FlagSet, flag_account_success) | 		res.FlagSet = append(res.FlagSet, flag_account_success) | ||||||
| 		res.FlagReset = append(res.FlagReset, flag_account_pending) | 		res.FlagReset = append(res.FlagReset, flag_account_pending) | ||||||
| @ -692,6 +715,7 @@ func (h *Handlers) CheckAccountStatus(ctx context.Context, sym string, input []b | |||||||
| 		res.FlagReset = append(res.FlagReset, flag_account_success) | 		res.FlagReset = append(res.FlagReset, flag_account_success) | ||||||
| 		res.FlagSet = append(res.FlagSet, flag_account_pending) | 		res.FlagSet = append(res.FlagSet, flag_account_pending) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -783,11 +807,13 @@ func (h *Handlers) CheckBalance(ctx context.Context, sym string, input []byte) ( | |||||||
| 			return res, nil | 			return res, nil | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeSym entry with", "key", common.DATA_ACTIVE_SYM, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeBal entry with", "key", common.DATA_ACTIVE_BAL, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -811,6 +837,7 @@ func (h *Handlers) FetchCustodialBalances(ctx context.Context, sym string, input | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", common.DATA_PUBLIC_KEY, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -843,16 +870,19 @@ func (h *Handlers) ResetOthersPin(ctx context.Context, sym string, input []byte) | |||||||
| 	} | 	} | ||||||
| 	blockedPhonenumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | 	blockedPhonenumber, err := store.ReadEntry(ctx, sessionId, common.DATA_BLOCKED_NUMBER) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read blockedPhonenumber entry with", "key", common.DATA_BLOCKED_NUMBER, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	temporaryPin, err := store.ReadEntry(ctx, string(blockedPhonenumber), common.DATA_TEMPORARY_VALUE) | 	temporaryPin, err := store.ReadEntry(ctx, string(blockedPhonenumber), common.DATA_TEMPORARY_VALUE) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read temporaryPin entry with", "key", common.DATA_TEMPORARY_VALUE, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	err = store.WriteEntry(ctx, string(blockedPhonenumber), common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | 	err = store.WriteEntry(ctx, string(blockedPhonenumber), common.DATA_ACCOUNT_PIN, []byte(temporaryPin)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return res, nil | 		return res, nil | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -881,10 +911,11 @@ func (h *Handlers) ValidateBlockedNumber(ctx context.Context, sym string, input | |||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if db.IsNotFound(err) { | 		if db.IsNotFound(err) { | ||||||
| 			logg.Printf(logging.LVL_INFO, "Invalid or unregistered number") | 			logg.InfoCtxf(ctx, "Invalid or unregistered number") | ||||||
| 			res.FlagSet = append(res.FlagSet, flag_unregistered_number) | 			res.FlagSet = append(res.FlagSet, flag_unregistered_number) | ||||||
| 			return res, nil | 			return res, nil | ||||||
| 		} else { | 		} else { | ||||||
|  | 			logg.ErrorCtxf(ctx, "Error on ValidateBlockedNumber", "error", err) | ||||||
| 			return res, err | 			return res, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -992,6 +1023,7 @@ func (h *Handlers) MaxAmount(ctx context.Context, sym string, input []byte) (res | |||||||
| 
 | 
 | ||||||
| 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeBal entry with", "key", common.DATA_ACTIVE_BAL, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1017,10 +1049,12 @@ func (h *Handlers) ValidateAmount(ctx context.Context, sym string, input []byte) | |||||||
| 	// retrieve the active balance
 | 	// retrieve the active balance
 | ||||||
| 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | 	activeBal, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_BAL) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeBal entry with", "key", common.DATA_ACTIVE_BAL, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 	balanceValue, err = strconv.ParseFloat(string(activeBal), 64) | 	balanceValue, err = strconv.ParseFloat(string(activeBal), 64) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "Failed to convert the activeBal to a float", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1043,10 +1077,11 @@ func (h *Handlers) ValidateAmount(ctx context.Context, sym string, input []byte) | |||||||
| 	formattedAmount := fmt.Sprintf("%.2f", inputAmount) | 	formattedAmount := fmt.Sprintf("%.2f", inputAmount) | ||||||
| 	err = store.WriteEntry(ctx, sessionId, common.DATA_AMOUNT, []byte(formattedAmount)) | 	err = store.WriteEntry(ctx, sessionId, common.DATA_AMOUNT, []byte(formattedAmount)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to write amount entry with", "key", common.DATA_AMOUNT, "value", formattedAmount, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	res.Content = fmt.Sprintf("%s", formattedAmount) | 	res.Content = formattedAmount | ||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1109,6 +1144,7 @@ func (h *Handlers) GetAmount(ctx context.Context, sym string, input []byte) (res | |||||||
| 	// retrieve the active symbol
 | 	// retrieve the active symbol
 | ||||||
| 	activeSym, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_SYM) | 	activeSym, err := store.ReadEntry(ctx, sessionId, common.DATA_ACTIVE_SYM) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeSym entry with", "key", common.DATA_ACTIVE_SYM, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1146,6 +1182,7 @@ func (h *Handlers) InitiateTransaction(ctx context.Context, sym string, input [] | |||||||
| 
 | 
 | ||||||
| 	account_authorized_flag, err := h.flagManager.GetFlag("flag_account_authorized") | 	account_authorized_flag, err := h.flagManager.GetFlag("flag_account_authorized") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "Failed to set the flag_account_authorized", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1337,6 +1374,7 @@ func (h *Handlers) SetDefaultVoucher(ctx context.Context, sym string, input []by | |||||||
| 		if db.IsNotFound(err) { | 		if db.IsNotFound(err) { | ||||||
| 			publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | 			publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", common.DATA_PUBLIC_KEY, "error", err) | ||||||
| 				return res, err | 				return res, err | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| @ -1361,17 +1399,20 @@ func (h *Handlers) SetDefaultVoucher(ctx context.Context, sym string, input []by | |||||||
| 			// set the active symbol
 | 			// set the active symbol
 | ||||||
| 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_SYM, []byte(defaultSym)) | 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_SYM, []byte(defaultSym)) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				logg.ErrorCtxf(ctx, "failed to write defaultSym entry with", "key", common.DATA_ACTIVE_SYM, "value", defaultSym, "error", err) | ||||||
| 				return res, err | 				return res, err | ||||||
| 			} | 			} | ||||||
| 			// set the active balance
 | 			// set the active balance
 | ||||||
| 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_BAL, []byte(defaultBal)) | 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_BAL, []byte(defaultBal)) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				logg.ErrorCtxf(ctx, "failed to write defaultBal entry with", "key", common.DATA_ACTIVE_BAL, "value", defaultBal, "error", err) | ||||||
| 				return res, err | 				return res, err | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			return res, nil | 			return res, nil | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed to read activeSym entry with", "key", common.DATA_ACTIVE_SYM, "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1392,7 +1433,8 @@ func (h *Handlers) CheckVouchers(ctx context.Context, sym string, input []byte) | |||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
| 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | 	publicKey, err := store.ReadEntry(ctx, sessionId, common.DATA_PUBLIC_KEY) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return res, nil | 		logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", common.DATA_PUBLIC_KEY, "error", err) | ||||||
|  | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Fetch vouchers from the API using the public key
 | 	// Fetch vouchers from the API using the public key
 | ||||||
| @ -1427,6 +1469,7 @@ func (h *Handlers) GetVoucherList(ctx context.Context, sym string, input []byte) | |||||||
| 	// Read vouchers from the store
 | 	// Read vouchers from the store
 | ||||||
| 	voucherData, err := h.prefixDb.Get(ctx, []byte("sym")) | 	voucherData, err := h.prefixDb.Get(ctx, []byte("sym")) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "Failed to read the voucherData from prefixDb", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1462,6 +1505,7 @@ func (h *Handlers) ViewVoucher(ctx context.Context, sym string, input []byte) (r | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := common.StoreTemporaryVoucher(ctx, h.userdataStore, sessionId, metadata); err != nil { | 	if err := common.StoreTemporaryVoucher(ctx, h.userdataStore, sessionId, metadata); err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed on StoreTemporaryVoucher", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -1483,11 +1527,13 @@ func (h *Handlers) SetVoucher(ctx context.Context, sym string, input []byte) (re | |||||||
| 	// Get temporary data
 | 	// Get temporary data
 | ||||||
| 	tempData, err := common.GetTemporaryVoucherData(ctx, h.userdataStore, sessionId) | 	tempData, err := common.GetTemporaryVoucherData(ctx, h.userdataStore, sessionId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed on GetTemporaryVoucherData", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Set as active and clear temporary data
 | 	// Set as active and clear temporary data
 | ||||||
| 	if err := common.UpdateVoucherData(ctx, h.userdataStore, sessionId, tempData); err != nil { | 	if err := common.UpdateVoucherData(ctx, h.userdataStore, sessionId, tempData); err != nil { | ||||||
|  | 		logg.ErrorCtxf(ctx, "failed on UpdateVoucherData", "error", err) | ||||||
| 		return res, err | 		return res, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -16,11 +16,6 @@ import ( | |||||||
| 	dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api" | 	dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( |  | ||||||
| 	InfoLogger  *log.Logger |  | ||||||
| 	ErrorLogger *log.Logger |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| type AccountServiceInterface interface { | type AccountServiceInterface interface { | ||||||
| 	CheckBalance(ctx context.Context, publicKey string) (*models.BalanceResult, error) | 	CheckBalance(ctx context.Context, publicKey string) (*models.BalanceResult, error) | ||||||
| 	CreateAccount(ctx context.Context) (*models.AccountResult, error) | 	CreateAccount(ctx context.Context) (*models.AccountResult, error) | ||||||
| @ -98,7 +93,6 @@ func (as *AccountService) CreateAccount(ctx context.Context) (*models.AccountRes | |||||||
| 	} | 	} | ||||||
| 	_, err = doCustodialRequest(ctx, req, &r) | 	_, err = doCustodialRequest(ctx, req, &r) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Printf("Failed to make custodial %s request to endpoint: %s with reason: %s", req.Method, req.URL, err.Error()) |  | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -179,12 +173,13 @@ func doRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKRespons | |||||||
| 	req.Header.Set("Content-Type", "application/json") | 	req.Header.Set("Content-Type", "application/json") | ||||||
| 	resp, err := http.DefaultClient.Do(req) | 	resp, err := http.DefaultClient.Do(req) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		log.Printf("Failed to make %s request to endpoint: %s with reason: %s", req.Method, req.URL, err.Error()) | ||||||
| 		errResponse.Description = err.Error() | 		errResponse.Description = err.Error() | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	defer resp.Body.Close() | 	defer resp.Body.Close() | ||||||
| 
 | 
 | ||||||
| 	InfoLogger.Printf("Received response for %s: Status Code: %d | Content-Type: %s", req.URL, resp.StatusCode, resp.Header.Get("Content-Type")) | 	log.Printf("Received response for %s: Status Code: %d | Content-Type: %s", req.URL, resp.StatusCode, resp.Header.Get("Content-Type")) | ||||||
| 	body, err := io.ReadAll(resp.Body) | 	body, err := io.ReadAll(resp.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| @ -214,13 +209,13 @@ func doRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKRespons | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func doCustodialRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | func doCustodialRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | ||||||
| 	req.Header.Set("X-GE-KEY", config.CustodialAPIKey) | 	req.Header.Set("Authorization", "Bearer "+config.CustodialBearerToken) | ||||||
| 	logRequestDetails(req) | 	logRequestDetails(req) | ||||||
| 	return doRequest(ctx, req, rcpt) | 	return doRequest(ctx, req, rcpt) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func doDataRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | func doDataRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | ||||||
| 	req.Header.Set("X-GE-KEY", config.DataAPIKey) | 	req.Header.Set("Authorization", "Bearer "+config.DataBearerToken) | ||||||
| 	logRequestDetails(req) | 	logRequestDetails(req) | ||||||
| 	return doRequest(ctx, req, rcpt) | 	return doRequest(ctx, req, rcpt) | ||||||
| } | } | ||||||
| @ -231,7 +226,7 @@ func logRequestDetails(req *http.Request) { | |||||||
| 	if req.Body != nil { | 	if req.Body != nil { | ||||||
| 		bodyBytes, err := io.ReadAll(req.Body) | 		bodyBytes, err := io.ReadAll(req.Body) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			ErrorLogger.Printf("Error reading request body: %s", err) | 			log.Printf("Error reading request body: %s", err) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) | 		req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) | ||||||
| @ -239,5 +234,5 @@ func logRequestDetails(req *http.Request) { | |||||||
| 		bodyBytes = []byte("-") | 		bodyBytes = []byte("-") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	InfoLogger.Printf("URL: %s  | Content-Type: %s | Method: %s| Request Body: %s", req.URL, contentType, req.Method, string(bodyBytes)) | 	log.Printf("URL: %s | Content-Type: %s | Method: %s| Request Body: %s", req.URL, contentType, req.Method, string(bodyBytes)) | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user