Jelajahi Sumber

auto update script executed

Toby Chui 1 tahun lalu
induk
melakukan
b9eead1d88
4 mengubah file dengan 131 tambahan dan 0 penghapusan
  1. 3 0
      api.go
  2. 1 0
      docs/expose proxy proposed design
  3. 16 0
      mod/expose/expose.go
  4. 111 0
      mod/expose/security.go

+ 3 - 0
api.go

@@ -82,6 +82,9 @@ func initAPIs() {
 	authRouter.HandleFunc("/api/whitelist/enable", handleWhitelistEnable)
 
 	//Path Blocker APIs
+	authRouter.HandleFunc("/api/pathblock/add", pathBlockHandler.HandleAddBlockingPath)
+	authRouter.HandleFunc("/api/pathblock/list", pathBlockHandler.HandleListBlockingPath)
+	authRouter.HandleFunc("/api/pathblock/remove", pathBlockHandler.HandleRemoveBlockingPath)
 
 	//Statistic & uptime monitoring API
 	authRouter.HandleFunc("/api/stats/summary", statisticCollector.HandleTodayStatLoad)

+ 1 - 0
docs/expose proxy proposed design

@@ -0,0 +1 @@
+<mxfile host="Electron" modified="2023-06-12T15:37:54.150Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/12.4.2 Chrome/78.0.3904.130 Electron/7.1.4 Safari/537.36" etag="9LISu8mGNIQjZMcC4kTR" version="12.4.2" type="device" pages="1"><diagram id="70W0q2Aty3m3e7t70Ufr" name="Page-1">3Vrfb6M4EP5rkLYPtwIcE/qYpLuttLq7PaXS6u6lcvA08ZZgzjhN0r/+bH4FbKptcwm7IQ8RDHiMv5lvPDPgoNl6dytIuvqdU4gd36U7B904vh9gV/1rwb4UjMNCsBSMFiLvIJizFyiF5bjlhlHIWjdKzmPJ0rYw4kkCkWzJiBB8277tkcftWVOyBEswj0hsS78xKleFNPTHB/kdsOWqmtkLrosra1LdXK4kWxHKtw0R+uSgmeBcFkfr3QxijV2FSzHu8ytX6wcTkMi3DKCT2224nX337r78MX/5+4WE4q/f/ELLM4k35YLLh5X7CgFI6EQDqc6imGQZixw0Xcl1rASeOiwGALVwPDyYVy9XuQnwNUixV7dsD4BWbrJqYFnJBMREsue2elLadVmrq2f4ypma2HdLF/TDUk/pgbXeSkXGNyKCclQTwB8oGnuGIknEEqSlSB00ln0Q5fZ5h63Q8G2FgxPZylTUt61Glq1mMYNyrqbFJOxk20YkZstEG1DdDkIJnkFIpiLSpLywZpTq4VMBGXshi1yVq85TvZp8fXjq4Bttb6VuI3lWhNWDB2iVsHuvD1Q8wH7bSFWE+4GP+O7r7tDC/71gYwvsf7ggu/0QwMYj99cCOxh+FLJ2jPGJohBy+41CY8tWkj9B4mjnmGrEN4tYGcd3n0Cj+6GIUVeOH8SaJwuhjpYyt1hA1qk6SBZZmp9Pc5j/3UCm15ttFpSvCdOqlfXTekEXzj5ksm9ks88LOzwRnYt+4fDpZ7HGBPPYhA2ZPD4z/a4tW5mEy0Ao/7yqCVlWMYxrIqVcyLdSMYNIwDAo57azC9Sx4dXVYS+UqyZr2PEWEhBEQjOGpoI9FyJl3JQwkQ3BHHj8yhbWjIDXfSYgnjf8EGhFrvBEGcio5zrIsxsMf34ZAi9qIM29peEgqFdavKE9kK1Iqg+jjYj3U0GiJ9C4b1dMwjwlkb62FSRt20LwTUKBng67GpjKKbtCfBd25v59OvDsev3u/v5rvi9/Vv/6ZD4Et/UM6JHXEc7dXv3WLlIGGM5x2+GPb2sZisx94dzh3C4/bhjJh6mgMSky1stnCRqHHxFqI91R+Y175YldTQyOJ2a2gs1+ybGVH+457am8oGGsSRRBqh9x1qjxBkAVjBRV3MNv1B2gmvtL595+Lt5UNBkyb8z9pW4a/9/9BffcMfHtJLZokTwUZfaDKq0fIInEPpUfip7H1U9nkeCS5HRGN/hEpPIMM6CuBLlXFtnvWCjkZtCzJdTJX3hHK2dIrSiz94G7glmvL1/8E7x9eWRxPOMxF/ntiGII6UjJMyn4EzSuhP4CBcEFhD+M23QJzN3+zWnD2FBkGvLc4e8EtZBh3scwgijqMu8ixLoOuUDzHvs6zjJvz9WTb6fwd2oYH0KsHLlGrLwefcRWtBz1GSyRnYQ3c293FvNMt+sX+3zX0mmGPmAUhmAQVMWOytlxx+bVa+Me2Y179ujol15C6E/3BgC6WcAGHW9Lgl4xt6ufHPOt4MlykIgHPxvxy+3Dd33d0FWre8HZwLP78Pcz3YbPeI7RABzWMz4pUUmYBXrXFyVHOKw6PXxeXCQxh2+00af/AA==</diagram></mxfile>

+ 16 - 0
mod/expose/expose.go

@@ -0,0 +1,16 @@
+package expose
+
+/*
+	Service Expose Proxy
+
+	A tunnel for getting your local server online in one line
+	(No, this is not ngrok)
+*/
+
+type Router struct {
+}
+
+//Create a new service expose router
+func NewServiceExposeRouter() {
+
+}

+ 111 - 0
mod/expose/security.go

@@ -0,0 +1,111 @@
+package expose
+
+import (
+	"crypto/rand"
+	"crypto/rsa"
+	"crypto/sha512"
+	"crypto/x509"
+	"encoding/pem"
+	"errors"
+	"log"
+)
+
+// GenerateKeyPair generates a new key pair
+func GenerateKeyPair(bits int) (*rsa.PrivateKey, *rsa.PublicKey, error) {
+	privkey, err := rsa.GenerateKey(rand.Reader, bits)
+	if err != nil {
+		return nil, nil, err
+	}
+	return privkey, &privkey.PublicKey, nil
+}
+
+// PrivateKeyToBytes private key to bytes
+func PrivateKeyToBytes(priv *rsa.PrivateKey) []byte {
+	privBytes := pem.EncodeToMemory(
+		&pem.Block{
+			Type:  "RSA PRIVATE KEY",
+			Bytes: x509.MarshalPKCS1PrivateKey(priv),
+		},
+	)
+
+	return privBytes
+}
+
+// PublicKeyToBytes public key to bytes
+func PublicKeyToBytes(pub *rsa.PublicKey) ([]byte, error) {
+	pubASN1, err := x509.MarshalPKIXPublicKey(pub)
+	if err != nil {
+		return []byte(""), err
+	}
+
+	pubBytes := pem.EncodeToMemory(&pem.Block{
+		Type:  "RSA PUBLIC KEY",
+		Bytes: pubASN1,
+	})
+
+	return pubBytes, nil
+}
+
+// BytesToPrivateKey bytes to private key
+func BytesToPrivateKey(priv []byte) (*rsa.PrivateKey, error) {
+	block, _ := pem.Decode(priv)
+	enc := x509.IsEncryptedPEMBlock(block)
+	b := block.Bytes
+	var err error
+	if enc {
+		log.Println("is encrypted pem block")
+		b, err = x509.DecryptPEMBlock(block, nil)
+		if err != nil {
+			return nil, err
+		}
+	}
+	key, err := x509.ParsePKCS1PrivateKey(b)
+	if err != nil {
+		return nil, err
+	}
+	return key, nil
+}
+
+// BytesToPublicKey bytes to public key
+func BytesToPublicKey(pub []byte) (*rsa.PublicKey, error) {
+	block, _ := pem.Decode(pub)
+	enc := x509.IsEncryptedPEMBlock(block)
+	b := block.Bytes
+	var err error
+	if enc {
+		log.Println("is encrypted pem block")
+		b, err = x509.DecryptPEMBlock(block, nil)
+		if err != nil {
+			return nil, err
+		}
+	}
+	ifc, err := x509.ParsePKIXPublicKey(b)
+	if err != nil {
+		return nil, err
+	}
+	key, ok := ifc.(*rsa.PublicKey)
+	if !ok {
+		return nil, errors.New("key not valid")
+	}
+	return key, nil
+}
+
+// EncryptWithPublicKey encrypts data with public key
+func EncryptWithPublicKey(msg []byte, pub *rsa.PublicKey) ([]byte, error) {
+	hash := sha512.New()
+	ciphertext, err := rsa.EncryptOAEP(hash, rand.Reader, pub, msg, nil)
+	if err != nil {
+		return []byte(""), err
+	}
+	return ciphertext, nil
+}
+
+// DecryptWithPrivateKey decrypts data with private key
+func DecryptWithPrivateKey(ciphertext []byte, priv *rsa.PrivateKey) ([]byte, error) {
+	hash := sha512.New()
+	plaintext, err := rsa.DecryptOAEP(hash, rand.Reader, priv, ciphertext, nil)
+	if err != nil {
+		return []byte(""), err
+	}
+	return plaintext, nil
+}