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 {
|
||||
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
|
||||
fmt.Scanln(&cmd)
|
||||
switch cmd {
|
||||
|
|
@ -97,14 +101,21 @@ func (a *administrator) getCommand() []byte {
|
|||
case "4":
|
||||
var uinfo UserInfo
|
||||
var b64UID string
|
||||
fmt.Printf("UID:")
|
||||
fmt.Scanln(&b64UID)
|
||||
UID, _ := base64.StdEncoding.DecodeString(b64UID)
|
||||
uinfo.UID = UID
|
||||
fmt.Printf("SessionsCap:")
|
||||
fmt.Scanf("%d", &uinfo.SessionsCap)
|
||||
fmt.Printf("UpRate:")
|
||||
fmt.Scanf("%d", &uinfo.UpRate)
|
||||
fmt.Printf("DownRate:")
|
||||
fmt.Scanf("%d", &uinfo.DownRate)
|
||||
fmt.Printf("UpCredit:")
|
||||
fmt.Scanf("%d", &uinfo.UpCredit)
|
||||
fmt.Printf("DownCredit:")
|
||||
fmt.Scanf("%d", &uinfo.DownCredit)
|
||||
fmt.Printf("ExpiryTime:")
|
||||
fmt.Scanf("%d", &uinfo.ExpiryTime)
|
||||
marshed, _ := json.Marshal(uinfo)
|
||||
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",
|
||||
"Key":"UNhY4JhezH9gQYqvDMWrWH9CwlcKiECVqejMrND2VFy2wjljjjqJWGiNoAYpWscJ0VEVkewo6o8S/jcNdNxFLQ==",
|
||||
"TicketTimeHint":3600,
|
||||
"NumConn":4,
|
||||
"MaskBrowser":"chrome"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"WebServerAddr":"204.79.197.200:443",
|
||||
"Key":"UGUmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ=",
|
||||
"PrivateKey":"EN5aPEpNBO+vw+BtFQY2OnK9bQU7rvEj5qmnmgwEtUc=",
|
||||
"AdminUID":"ugDmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ="
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@ import (
|
|||
|
||||
type rawConfig struct {
|
||||
ServerName string
|
||||
Key string
|
||||
UID string
|
||||
PublicKey string
|
||||
TicketTimeHint int
|
||||
MaskBrowser string
|
||||
NumConn int
|
||||
|
|
@ -105,24 +106,23 @@ func (sta *State) ParseConfig(conf string) (err error) {
|
|||
sta.TicketTimeHint = preParse.TicketTimeHint
|
||||
sta.MaskBrowser = preParse.MaskBrowser
|
||||
sta.NumConn = preParse.NumConn
|
||||
uid, pub, err := parseKey(preParse.Key)
|
||||
uid, err := base64.StdEncoding.DecodeString(preParse.UID)
|
||||
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.staticPub = pub
|
||||
return nil
|
||||
}
|
||||
|
||||
// Structure: [UID 32 bytes][marshalled public key 32 bytes]
|
||||
func parseKey(b64 string) ([]byte, crypto.PublicKey, error) {
|
||||
b, err := base64.StdEncoding.DecodeString(b64)
|
||||
pubBytes, err := base64.StdEncoding.DecodeString(preParse.PublicKey)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return errors.New("Failed to parse Public key: " + err.Error())
|
||||
}
|
||||
ec := ecdh.NewCurve25519ECDH()
|
||||
pub, _ := ec.Unmarshal(b[32:64])
|
||||
return b[0:32], pub, nil
|
||||
pub, ok := ec.Unmarshal(pubBytes)
|
||||
if !ok {
|
||||
return errors.New("Failed to unmarshal Public key")
|
||||
}
|
||||
sta.staticPub = pub
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sta *State) getKeyPair(tthInterval int64) *keyPair {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import (
|
|||
|
||||
type rawConfig struct {
|
||||
WebServerAddr string
|
||||
Key string
|
||||
PrivateKey string
|
||||
AdminUID string
|
||||
}
|
||||
type stateManager interface {
|
||||
|
|
@ -82,17 +82,6 @@ func ssvToJson(ssv string) (ret []byte) {
|
|||
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
|
||||
func parseAdminUID(b64 string) ([]byte, error) {
|
||||
uid, err := base64.StdEncoding.DecodeString(b64)
|
||||
|
|
@ -123,11 +112,14 @@ func (sta *State) ParseConfig(conf string) (err error) {
|
|||
}
|
||||
|
||||
sta.WebServerAddr = preParse.WebServerAddr
|
||||
pv, err := parseKey(preParse.Key)
|
||||
|
||||
pvBytes, err := base64.StdEncoding.DecodeString(preParse.PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sta.staticPv = pv
|
||||
var pv [32]byte
|
||||
copy(pv[:], pvBytes)
|
||||
sta.staticPv = &pv
|
||||
|
||||
adminUID, err := parseAdminUID(preParse.AdminUID)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ import (
|
|||
"log"
|
||||
)
|
||||
|
||||
// FIXME: sanity checks. The server may panic due to user input
|
||||
|
||||
/*
|
||||
0 reserved
|
||||
1 listActiveUsers none []uids
|
||||
|
|
|
|||
Loading…
Reference in New Issue