mirror of https://github.com/cbeuw/Cloak
Redo config format
This commit is contained in:
parent
0253f8077a
commit
304f7f38a7
|
|
@ -81,6 +81,10 @@ func adminHandshake(sta *client.State) *administrator {
|
||||||
|
|
||||||
func (a *administrator) getCommand() []byte {
|
func (a *administrator) getCommand() []byte {
|
||||||
fmt.Println("Select your command")
|
fmt.Println("Select your command")
|
||||||
|
fmt.Println(`1 listActiveUsers none []uids
|
||||||
|
2 listAllUsers none []userinfo
|
||||||
|
3 getUserInfo uid userinfo
|
||||||
|
4 addNewUser userinfo ok`)
|
||||||
var cmd string
|
var cmd string
|
||||||
fmt.Scanln(&cmd)
|
fmt.Scanln(&cmd)
|
||||||
switch cmd {
|
switch cmd {
|
||||||
|
|
@ -97,14 +101,21 @@ func (a *administrator) getCommand() []byte {
|
||||||
case "4":
|
case "4":
|
||||||
var uinfo UserInfo
|
var uinfo UserInfo
|
||||||
var b64UID string
|
var b64UID string
|
||||||
|
fmt.Printf("UID:")
|
||||||
fmt.Scanln(&b64UID)
|
fmt.Scanln(&b64UID)
|
||||||
UID, _ := base64.StdEncoding.DecodeString(b64UID)
|
UID, _ := base64.StdEncoding.DecodeString(b64UID)
|
||||||
uinfo.UID = UID
|
uinfo.UID = UID
|
||||||
|
fmt.Printf("SessionsCap:")
|
||||||
fmt.Scanf("%d", &uinfo.SessionsCap)
|
fmt.Scanf("%d", &uinfo.SessionsCap)
|
||||||
|
fmt.Printf("UpRate:")
|
||||||
fmt.Scanf("%d", &uinfo.UpRate)
|
fmt.Scanf("%d", &uinfo.UpRate)
|
||||||
|
fmt.Printf("DownRate:")
|
||||||
fmt.Scanf("%d", &uinfo.DownRate)
|
fmt.Scanf("%d", &uinfo.DownRate)
|
||||||
|
fmt.Printf("UpCredit:")
|
||||||
fmt.Scanf("%d", &uinfo.UpCredit)
|
fmt.Scanf("%d", &uinfo.UpCredit)
|
||||||
|
fmt.Printf("DownCredit:")
|
||||||
fmt.Scanf("%d", &uinfo.DownCredit)
|
fmt.Scanf("%d", &uinfo.DownCredit)
|
||||||
|
fmt.Printf("ExpiryTime:")
|
||||||
fmt.Scanf("%d", &uinfo.ExpiryTime)
|
fmt.Scanf("%d", &uinfo.ExpiryTime)
|
||||||
marshed, _ := json.Marshal(uinfo)
|
marshed, _ := json.Marshal(uinfo)
|
||||||
return a.request(append([]byte{0x04}, marshed...))
|
return a.request(append([]byte{0x04}, marshed...))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
ecdh "github.com/cbeuw/go-ecdh"
|
||||||
|
)
|
||||||
|
|
||||||
|
var b64 = base64.StdEncoding.EncodeToString
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
UID := make([]byte, 32)
|
||||||
|
rand.Read(UID)
|
||||||
|
|
||||||
|
ec := ecdh.NewCurve25519ECDH()
|
||||||
|
staticPv, staticPub, _ := ec.GenerateKey(rand.Reader)
|
||||||
|
marshPub := ec.Marshal(staticPub)
|
||||||
|
marshPv := staticPv.(*[32]byte)[:]
|
||||||
|
|
||||||
|
fmt.Printf("USER: \n")
|
||||||
|
fmt.Printf("\"UID\":\"%v\",\n", b64(UID))
|
||||||
|
fmt.Printf("\"PublicKey\":\"%v\"\n", b64(marshPub))
|
||||||
|
|
||||||
|
fmt.Println("=========================================")
|
||||||
|
|
||||||
|
fmt.Printf("SERVER: \n")
|
||||||
|
fmt.Printf("\"PrivateKey\":\"%v\"\n", b64(marshPv))
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
|
"UID":"iGAO85zysIyR4c09CyZSLdNhtP/ckcYu7nIPI082AHA=",
|
||||||
|
"PublicKey":"IYoUzkle/T/kriE+Ufdm7AHQtIeGnBWbhhlTbmDpUUI=",
|
||||||
"ServerName":"www.bing.com",
|
"ServerName":"www.bing.com",
|
||||||
"Key":"UNhY4JhezH9gQYqvDMWrWH9CwlcKiECVqejMrND2VFy2wjljjjqJWGiNoAYpWscJ0VEVkewo6o8S/jcNdNxFLQ==",
|
|
||||||
"TicketTimeHint":3600,
|
"TicketTimeHint":3600,
|
||||||
"NumConn":4,
|
"NumConn":4,
|
||||||
"MaskBrowser":"chrome"
|
"MaskBrowser":"chrome"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"WebServerAddr":"204.79.197.200:443",
|
"WebServerAddr":"204.79.197.200:443",
|
||||||
"Key":"UGUmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ=",
|
"PrivateKey":"EN5aPEpNBO+vw+BtFQY2OnK9bQU7rvEj5qmnmgwEtUc=",
|
||||||
"AdminUID":"ugDmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ="
|
"AdminUID":"ugDmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ="
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,8 @@ import (
|
||||||
|
|
||||||
type rawConfig struct {
|
type rawConfig struct {
|
||||||
ServerName string
|
ServerName string
|
||||||
Key string
|
UID string
|
||||||
|
PublicKey string
|
||||||
TicketTimeHint int
|
TicketTimeHint int
|
||||||
MaskBrowser string
|
MaskBrowser string
|
||||||
NumConn int
|
NumConn int
|
||||||
|
|
@ -105,24 +106,23 @@ func (sta *State) ParseConfig(conf string) (err error) {
|
||||||
sta.TicketTimeHint = preParse.TicketTimeHint
|
sta.TicketTimeHint = preParse.TicketTimeHint
|
||||||
sta.MaskBrowser = preParse.MaskBrowser
|
sta.MaskBrowser = preParse.MaskBrowser
|
||||||
sta.NumConn = preParse.NumConn
|
sta.NumConn = preParse.NumConn
|
||||||
uid, pub, err := parseKey(preParse.Key)
|
uid, err := base64.StdEncoding.DecodeString(preParse.UID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("Failed to parse Key: " + err.Error())
|
return errors.New("Failed to parse UID: " + err.Error())
|
||||||
}
|
}
|
||||||
sta.UID = uid
|
sta.UID = uid
|
||||||
sta.staticPub = pub
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Structure: [UID 32 bytes][marshalled public key 32 bytes]
|
pubBytes, err := base64.StdEncoding.DecodeString(preParse.PublicKey)
|
||||||
func parseKey(b64 string) ([]byte, crypto.PublicKey, error) {
|
|
||||||
b, err := base64.StdEncoding.DecodeString(b64)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return errors.New("Failed to parse Public key: " + err.Error())
|
||||||
}
|
}
|
||||||
ec := ecdh.NewCurve25519ECDH()
|
ec := ecdh.NewCurve25519ECDH()
|
||||||
pub, _ := ec.Unmarshal(b[32:64])
|
pub, ok := ec.Unmarshal(pubBytes)
|
||||||
return b[0:32], pub, nil
|
if !ok {
|
||||||
|
return errors.New("Failed to unmarshal Public key")
|
||||||
|
}
|
||||||
|
sta.staticPub = pub
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sta *State) getKeyPair(tthInterval int64) *keyPair {
|
func (sta *State) getKeyPair(tthInterval int64) *keyPair {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import (
|
||||||
|
|
||||||
type rawConfig struct {
|
type rawConfig struct {
|
||||||
WebServerAddr string
|
WebServerAddr string
|
||||||
Key string
|
PrivateKey string
|
||||||
AdminUID string
|
AdminUID string
|
||||||
}
|
}
|
||||||
type stateManager interface {
|
type stateManager interface {
|
||||||
|
|
@ -82,17 +82,6 @@ func ssvToJson(ssv string) (ret []byte) {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// base64 encoded 32 byte private key
|
|
||||||
func parseKey(b64 string) (crypto.PrivateKey, error) {
|
|
||||||
b, err := base64.StdEncoding.DecodeString(b64)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var pv [32]byte
|
|
||||||
copy(pv[:], b)
|
|
||||||
return &pv, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// base64 encoded 32 byte adminUID
|
// base64 encoded 32 byte adminUID
|
||||||
func parseAdminUID(b64 string) ([]byte, error) {
|
func parseAdminUID(b64 string) ([]byte, error) {
|
||||||
uid, err := base64.StdEncoding.DecodeString(b64)
|
uid, err := base64.StdEncoding.DecodeString(b64)
|
||||||
|
|
@ -123,11 +112,14 @@ func (sta *State) ParseConfig(conf string) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sta.WebServerAddr = preParse.WebServerAddr
|
sta.WebServerAddr = preParse.WebServerAddr
|
||||||
pv, err := parseKey(preParse.Key)
|
|
||||||
|
pvBytes, err := base64.StdEncoding.DecodeString(preParse.PrivateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
sta.staticPv = pv
|
var pv [32]byte
|
||||||
|
copy(pv[:], pvBytes)
|
||||||
|
sta.staticPv = &pv
|
||||||
|
|
||||||
adminUID, err := parseAdminUID(preParse.AdminUID)
|
adminUID, err := parseAdminUID(preParse.AdminUID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import (
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// FIXME: sanity checks. The server may panic due to user input
|
||||||
|
|
||||||
/*
|
/*
|
||||||
0 reserved
|
0 reserved
|
||||||
1 listActiveUsers none []uids
|
1 listActiveUsers none []uids
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue