ratio-spoof/internal/emulation/emulation.go
2021-03-12 23:15:18 -03:00

84 lines
1.7 KiB
Go

package emulation
import (
"embed"
"encoding/json"
"io/ioutil"
"github.com/ap-pauloafonso/ratio-spoof/internal/generator"
)
type ClientInfo struct {
Name string `json:"name"`
PeerID struct {
Generator string `json:"generator"`
Regex string `json:"regex"`
} `json:"peerId"`
Key struct {
Generator string `json:"generator"`
Regex string `json:"regex"`
} `json:"key"`
Rounding struct {
Generator string `json:"generator"`
Regex string `json:"regex"`
} `json:"rounding"`
Query string `json:"query"`
Headers map[string]string `json:"headers"`
}
type Emulation struct {
PeerIdGenerator generator.PeerIdGenerator
KeyGenerator generator.KeyGenerator
Query string
Name string
Headers map[string]string
RoudingGenerator generator.RoundingGenerator
}
func NewEmulation(code string) (*Emulation, error) {
c, err := extractClient(code)
if err != nil {
return nil, err
}
peerG, err := generator.NewPeerIdGenerator(c.PeerID.Generator, c.PeerID.Regex)
if err != nil {
return nil, err
}
keyG, err := generator.NewKeyGenerator(c.Key.Generator)
if err != nil {
return nil, err
}
roudingG, err := generator.NewRoundingGenerator(c.Rounding.Generator)
if err != nil {
return nil, err
}
return &Emulation{PeerIdGenerator: peerG, KeyGenerator: keyG, RoudingGenerator: roudingG,
Headers: c.Headers, Name: c.Name, Query: c.Query}, nil
}
//go:embed static
var staticFiles embed.FS
func extractClient(code string) (*ClientInfo, error) {
f, err := staticFiles.Open("static/" + code + ".json")
if err != nil {
return nil, err
}
bytes, err := ioutil.ReadAll(f)
if err != nil {
return nil, err
}
var client ClientInfo
json.Unmarshal(bytes, &client)
return &client, nil
}