srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/internal/ipc/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ipc/server.go')
-rw-r--r--internal/ipc/server.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/internal/ipc/server.go b/internal/ipc/server.go
index c890a54..4db27b9 100644
--- a/internal/ipc/server.go
+++ b/internal/ipc/server.go
@@ -9,6 +9,7 @@ import (
"regexp"
"sync"
+ "mitmux/internal/clientcert"
"mitmux/internal/proxy"
"mitmux/internal/rules"
"mitmux/internal/scope"
@@ -347,6 +348,52 @@ func (s *Server) handleConn(conn net.Conn) {
}
enc.Encode(Response{Type: "scope_rules"})
+ case "clientcert_list":
+ certs, err := s.db.ListClientCerts()
+ if err != nil {
+ enc.Encode(Response{Type: "error", Error: err.Error()})
+ continue
+ }
+ enc.Encode(Response{Type: "client_certs", ClientCerts: certs})
+
+ case "clientcert_add":
+ if req.ClientCert == nil {
+ enc.Encode(Response{Type: "error", Error: "clientcert_add: missing certificate"})
+ continue
+ }
+ cert := *req.ClientCert
+ if cert.IsRegex {
+ if _, err := regexp.Compile(cert.Pattern); err != nil {
+ enc.Encode(Response{Type: "error", Error: "invalid regex: " + err.Error()})
+ continue
+ }
+ }
+ if _, err := cert.TLSCertificate(); err != nil {
+ enc.Encode(Response{Type: "error", Error: err.Error()})
+ continue
+ }
+ id, err := s.db.AddClientCert(cert)
+ if err != nil {
+ enc.Encode(Response{Type: "error", Error: err.Error()})
+ continue
+ }
+ cert.ID = id
+ enc.Encode(Response{Type: "client_certs", ClientCerts: []clientcert.Cert{cert}})
+
+ case "clientcert_delete":
+ if err := s.db.DeleteClientCert(req.ClientCertID); err != nil {
+ enc.Encode(Response{Type: "error", Error: err.Error()})
+ continue
+ }
+ enc.Encode(Response{Type: "client_certs"})
+
+ case "clientcert_toggle":
+ if err := s.db.SetClientCertEnabled(req.ClientCertID, req.RuleEnabled); err != nil {
+ enc.Encode(Response{Type: "error", Error: err.Error()})
+ continue
+ }
+ enc.Encode(Response{Type: "client_certs"})
+
case "subscribe":
sub := s.hub.subscribe()
defer s.hub.unsubscribe(sub)