profile-edit-show #171
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -6,3 +6,4 @@ go.work* | |||||||
| cmd/.state/ | cmd/.state/ | ||||||
| id_* | id_* | ||||||
| *.gdbm | *.gdbm | ||||||
|  | *.log | ||||||
|  | |||||||
| @ -1,9 +1,13 @@ | |||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"bytes" | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | 	"log" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| @ -27,10 +31,26 @@ 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{} | ||||||
| @ -38,9 +58,30 @@ 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) | ||||||
| 		return "", handlers.ErrInvalidRequest | 		return "", handlers.ErrInvalidRequest | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	// Capture body (if any) for logging
 | ||||||
|  | 	body, err := io.ReadAll(rqv.Body) | ||||||
|  | 	if err != nil { | ||||||
|  | 		ErrorLogger.Println("failed to read request body:", err) | ||||||
|  | 		return "", fmt.Errorf("failed to read request body: %v", err) | ||||||
|  | 	} | ||||||
|  | 	// Reset the body for further reading
 | ||||||
|  | 	rqv.Body = io.NopCloser(bytes.NewReader(body)) | ||||||
|  | 
 | ||||||
|  | 	// Log the body as JSON
 | ||||||
|  | 	bodyLog := map[string]string{"body": string(body)} | ||||||
|  | 	logBytes, err := json.Marshal(bodyLog) | ||||||
|  | 	if err != nil { | ||||||
|  | 		ErrorLogger.Println("failed to marshal request body:", err) | ||||||
|  | 	} else { | ||||||
|  | 		InfoLogger.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) | ||||||
| 		return "", fmt.Errorf("failed to parse form data: %v", err) | 		return "", fmt.Errorf("failed to parse form data: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| 	"path" | 	"path" | ||||||
| @ -23,12 +24,27 @@ 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,6 +4,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"log" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
| @ -26,10 +27,26 @@ 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,6 +4,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
| 	"path" | 	"path" | ||||||
| 
 | 
 | ||||||
| @ -20,10 +21,26 @@ 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() { | ||||||
|  | |||||||
| @ -18,9 +18,8 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	DebugLogger = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile) | 	InfoLogger  *log.Logger | ||||||
| 	InfoLogger  = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime) | 	ErrorLogger *log.Logger | ||||||
| 	ErrorLogger = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type AccountServiceInterface interface { | type AccountServiceInterface interface { | ||||||
| @ -98,9 +97,9 @@ func (as *AccountService) CreateAccount(ctx context.Context) (*models.AccountRes | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	_, 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 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -178,7 +177,6 @@ func (as *AccountService) VoucherData(ctx context.Context, address string) (*mod | |||||||
| func doRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | func doRequest(ctx context.Context, req *http.Request, rcpt any) (*api.OKResponse, error) { | ||||||
| 	var okResponse api.OKResponse | 	var okResponse api.OKResponse | ||||||
| 	var errResponse api.ErrResponse | 	var errResponse api.ErrResponse | ||||||
| 
 |  | ||||||
| 	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 { | ||||||
| @ -218,17 +216,17 @@ 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("X-GE-KEY", config.CustodialAPIKey) | ||||||
| 	logRequestDetails(req, config.CustodialAPIKey) | 	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("X-GE-KEY", config.DataAPIKey) | ||||||
| 	logRequestDetails(req, config.CustodialAPIKey) | 	logRequestDetails(req) | ||||||
| 	return doRequest(ctx, req, rcpt) | 	return doRequest(ctx, req, rcpt) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func logRequestDetails(req *http.Request, apiKey string) { | func logRequestDetails(req *http.Request) { | ||||||
| 	var bodyBytes []byte | 	var bodyBytes []byte | ||||||
| 	contentType := req.Header.Get("Content-Type") | 	contentType := req.Header.Get("Content-Type") | ||||||
| 	if req.Body != nil { | 	if req.Body != nil { | ||||||
| @ -243,5 +241,4 @@ func logRequestDetails(req *http.Request, apiKey string) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	InfoLogger.Printf("URL: %s  | Content-Type: %s | Method: %s| Request Body: %s", req.URL, contentType, req.Method, string(bodyBytes)) | 	InfoLogger.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