Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

118
pkg/tmobtokengen/ehts.go Normal file
View File

@@ -0,0 +1,118 @@
package tmobtokengen
import (
"crypto/sha256"
"encoding/base64"
"strings"
)
type EhtsKey string
const (
Authorization EhtsKey = "Authorization"
URI EhtsKey = "uri"
HTTPMethod EhtsKey = "http-method"
ContentType EhtsKey = "Content-Type"
B2BClient EhtsKey = "B2b-client" // No idea what this is for
Body EhtsKey = "body"
)
// ehtsKeyList order is important for serialization.
var ehtsKeyList = []EhtsKey{Authorization, URI, HTTPMethod, Body, ContentType, B2BClient}
func ehtsToString(ehts map[EhtsKey]string) (ks string, vs string) {
kb, vb := new(strings.Builder), new(strings.Builder)
for _, k := range ehtsKeyList {
v, ok := ehts[k]
if !ok {
continue
}
if kb.Len() > 0 {
kb.WriteRune(';')
}
kb.WriteString(string(k))
vb.WriteString(v)
}
return kb.String(), vb.String()
}
func b64EncodeEHTS(ehts []byte) []byte {
sum := sha256.Sum256(ehts)
encoded := make([]byte, base64.URLEncoding.EncodedLen(len(sum)))
base64.URLEncoding.Encode(encoded, sum[:])
// It appears to be that T-Mob removes the padding.
i := len(encoded) - 1
for ; i > 0; i-- {
if i != '=' {
break
}
}
return encoded[:i]
}
// EHTSMap is a map of EHTS keys and values.
// Set[X] methods are used to set values in the map,
// Yet if the value for the given setter is empty, it won't set anything.
// Thus remember to set explicitly the value to empty string if there is need.
type EHTSMap map[EhtsKey]string
func (m EHTSMap) Copy() EHTSMap {
c := make(EHTSMap)
for k, v := range m {
c[k] = v
}
return c
}
func (m EHTSMap) SetContentType(contentType string) EHTSMap {
if len(contentType) > 0 {
m[ContentType] = contentType
}
return m
}
func (m EHTSMap) SetAuthorization(authorization string) EHTSMap {
if len(authorization) > 0 {
m[Authorization] = authorization
}
return m
}
func (m EHTSMap) SetB2BClient(b2bClient string) EHTSMap {
if len(b2bClient) > 0 {
m[B2BClient] = b2bClient
}
return m
}
func (m EHTSMap) SetURI(uri string) EHTSMap {
if len(uri) > 0 {
m[URI] = uri
}
return m
}
func (m EHTSMap) SetBody(body string) EHTSMap {
if len(body) > 0 {
m[Body] = body
}
return m
}
func (m EHTSMap) SetHTTPMethod(httpMethod string) EHTSMap {
if len(httpMethod) > 0 {
m[HTTPMethod] = httpMethod
}
return m
}