diff options
Diffstat (limited to 'internal/ipc/server.go')
| -rw-r--r-- | internal/ipc/server.go | 47 |
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) |