summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortjp <tjp@ctrl-c.club>2024-01-10 11:04:52 -0700
committertjp <tjp@ctrl-c.club>2024-01-10 11:04:52 -0700
commit99a0553452971f4c3bae72651f16a7c2cc36b25b (patch)
treec2e4b0a5f7eaa1e28948cdbcb2f0cb995984afb0
parentaa46d49b8952a69e37cdf10b61a0ef83c49cc1de (diff)
fixes to identities
* include a hash in "identity list" * fixed using identities on a folder
-rw-r--r--identity.go23
-rw-r--r--tls.go1
2 files changed, 18 insertions, 6 deletions
diff --git a/identity.go b/identity.go
index 891c01b..15da94b 100644
--- a/identity.go
+++ b/identity.go
@@ -2,12 +2,12 @@ package main
import (
"bytes"
+ "crypto/sha256"
"crypto/tls"
+ "encoding/hex"
"errors"
"fmt"
- "io"
"net/url"
- "os"
"strings"
)
@@ -43,6 +43,9 @@ func (ids Identities) Get(u *url.URL) *tls.Config {
return conf
}
+ if conf, ok := ids.ByFolder[u.Hostname()+u.Path]; ok {
+ return conf
+ }
pathsegments := strings.Split(strings.TrimLeft(u.Path, "/"), "/")
for len(pathsegments) > 0 {
pathsegments = pathsegments[0 : len(pathsegments)-1]
@@ -70,7 +73,7 @@ func IdentityCreate(state *BrowserState, name string) error {
func IdentityList(state *BrowserState) error {
buf := &bytes.Buffer{}
for name, ident := range state.Identities.ByName {
- if _, err := fmt.Fprintf(buf, "%s:\n", name); err != nil {
+ if _, err := fmt.Fprintf(buf, "%s (%s):\n", name, showIdent(ident)); err != nil {
return err
}
@@ -97,8 +100,11 @@ func IdentityList(state *BrowserState) error {
}
}
- _, err := io.Copy(os.Stdout, buf)
- return err
+ state.Modal = buf.Bytes()
+ if len(state.Modal) == 0 {
+ state.Modal = []byte("(empty)\n")
+ }
+ return Print(state)
}
func IdentityDelete(state *BrowserState, name string) error {
@@ -176,7 +182,7 @@ func IdentityUseFolder(state *BrowserState, name string, domain string) error {
return err
}
- state.Identities.ByFolder[fmt.Sprintf("%s/%s", u.Hostname(), u.Path)] = ident
+ state.Identities.ByFolder[u.Hostname()+u.Path] = ident
return saveIdentities(state.Identities)
}
@@ -203,3 +209,8 @@ func IdentityUsePage(state *BrowserState, name string, domain string) error {
state.Identities.ByPage[u.String()] = ident
return saveIdentities(state.Identities)
}
+
+func showIdent(ident *tls.Config) string {
+ hash := sha256.Sum256(ident.Certificates[0].Certificate[0])
+ return strings.ToUpper(hex.EncodeToString(hash[:])[:10])
+}
diff --git a/tls.go b/tls.go
index 0ad56f4..fa25441 100644
--- a/tls.go
+++ b/tls.go
@@ -98,6 +98,7 @@ func createIdentity(state *BrowserState, name string) (*tls.Config, error) {
Subject: pkix.Name{CommonName: commonName},
NotAfter: expiration,
KeyUsage: x509.KeyUsageDigitalSignature,
+ ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
BasicConstraintsValid: true,
}