extract session id from africastalking request
This commit is contained in:
parent
f65c458daa
commit
3ce1435591
@ -8,6 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path"
|
"path"
|
||||||
@ -29,7 +30,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
logg = logging.NewVanilla()
|
logg = logging.NewVanilla().WithDomain("AfricasTalking").WithContextKey("at-session-id")
|
||||||
scriptDir = path.Join("services", "registration")
|
scriptDir = path.Join("services", "registration")
|
||||||
build = "dev"
|
build = "dev"
|
||||||
menuSeparator = ": "
|
menuSeparator = ": "
|
||||||
@ -39,7 +40,43 @@ func init() {
|
|||||||
initializers.LoadEnvVariables()
|
initializers.LoadEnvVariables()
|
||||||
}
|
}
|
||||||
|
|
||||||
type atRequestParser struct{}
|
type atRequestParser struct {
|
||||||
|
context context.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseQueryParams(query string) map[string]string {
|
||||||
|
params := make(map[string]string)
|
||||||
|
|
||||||
|
queryParams := strings.Split(query, "&")
|
||||||
|
for _, param := range queryParams {
|
||||||
|
// Split each key-value pair by '='
|
||||||
|
parts := strings.SplitN(param, "=", 2)
|
||||||
|
if len(parts) == 2 {
|
||||||
|
params[parts[0]] = parts[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
|
||||||
|
func extractATSessionId(decodedStr string) (string, error) {
|
||||||
|
var data map[string]string
|
||||||
|
err := json.Unmarshal([]byte(decodedStr), &data)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("Error unmarshalling JSON: %v", err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
decodedBody, err := url.QueryUnescape(data["body"])
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("Error URL-decoding body: %v", err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
params := parseQueryParams(decodedBody)
|
||||||
|
|
||||||
|
sessionId := params["sessionId"]
|
||||||
|
return sessionId, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
@ -63,7 +100,12 @@ func (arp *atRequestParser) GetSessionId(rq any) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logg.Warnf("failed to marshal request body", "err", err)
|
logg.Warnf("failed to marshal request body", "err", err)
|
||||||
} else {
|
} else {
|
||||||
logg.Debugf("received request", "bytes", logBytes)
|
decodedStr := string(logBytes)
|
||||||
|
sessionId, err := extractATSessionId(decodedStr)
|
||||||
|
if err != nil {
|
||||||
|
context.WithValue(arp.context, "at-session-id", sessionId)
|
||||||
|
}
|
||||||
|
logg.Debugf("Received request:", decodedStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := rqv.ParseForm(); err != nil {
|
if err := rqv.ParseForm(); err != nil {
|
||||||
@ -191,7 +233,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer stateStore.Close()
|
defer stateStore.Close()
|
||||||
|
|
||||||
rp := &atRequestParser{}
|
rp := &atRequestParser{
|
||||||
|
context: ctx,
|
||||||
|
}
|
||||||
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
||||||
sh := httpserver.NewATSessionHandler(bsh)
|
sh := httpserver.NewATSessionHandler(bsh)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user