Human-readable sharable hashes
This commit is contained in:
@ -3,57 +3,58 @@ package samtunnelhandler
|
||||
func DefaultCSS() string {
|
||||
return `.server {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #9DABD5;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.client {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #2D4470;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.http {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #00ffff;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.httpclient {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #709fa6;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.udpserver {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #265ea7;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.udpclient {
|
||||
width: 63%;
|
||||
max-width: 63%;
|
||||
min-height: 15%;
|
||||
background-color: #222187;
|
||||
float:left
|
||||
float: left;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.TunName {
|
||||
font-weight: bold;
|
||||
}
|
||||
.panel {
|
||||
width: 33%;
|
||||
max-width: 33%;
|
||||
float: right;
|
||||
|
||||
}
|
||||
.prop {
|
||||
|
||||
}
|
||||
.prop:hover {
|
||||
box-shadow: inset 0 0 100px 100px rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
.global {
|
||||
background-color: #00ffff;
|
||||
@ -62,6 +63,7 @@ body {
|
||||
background-color: #9e9e9e;
|
||||
color: #070425;
|
||||
font-family: "monospace";
|
||||
font-size: 1rem;
|
||||
}
|
||||
a {
|
||||
color: #080808;
|
||||
@ -69,6 +71,18 @@ a {
|
||||
h1 {
|
||||
background-color: #9e9e9e;
|
||||
}
|
||||
span {
|
||||
float: left;
|
||||
display: inline;
|
||||
}
|
||||
textarea {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
resize: none;
|
||||
height: 1rem;
|
||||
float: right;
|
||||
display: inline;
|
||||
}
|
||||
.linkstyle {
|
||||
align-items: normal;
|
||||
background-color: rgba(0,0,0,0);
|
||||
@ -77,9 +91,9 @@ h1 {
|
||||
box-sizing: content-box;
|
||||
color: rgb(0, 0, 238);
|
||||
cursor: pointer;
|
||||
display: inline;
|
||||
font: inherit;
|
||||
height: auto;
|
||||
display: inline;
|
||||
padding: 0;
|
||||
perspective-origin: 0 0;
|
||||
text-align: start;
|
||||
|
@ -3,6 +3,7 @@ package samtunnelhandler
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -29,13 +30,22 @@ func (t *TunnelHandler) Printdivf(id, key, value string, rw http.ResponseWriter,
|
||||
if strings.HasSuffix(req.URL.Path, "color") {
|
||||
fmt.Fprintf(rw, " <div id=\"%s\" class=\"%s %s %s %s\" >\n", ID, t.SAMTunnel.ID(), key, t.SAMTunnel.GetType(), prop)
|
||||
fmt.Fprintf(rw, " <span id=\"%s\" class=\"key\">%s</span>=", ID, key)
|
||||
fmt.Fprintf(rw, " <span id=\"%s\" class=\"value\">%s</span>\n", ID, value)
|
||||
fmt.Fprintf(rw, " <textarea id=\"%s\" rows=\"1\" class=\"value\">%s</textarea>\n", ID, value)
|
||||
fmt.Fprintf(rw, " </div>\n\n")
|
||||
} else {
|
||||
fmt.Fprintf(rw, "%s=%s\n", ID, t.SAMTunnel.ID())
|
||||
}
|
||||
}
|
||||
|
||||
func PropSort(props map[string]string) []string {
|
||||
var slice []string
|
||||
for k, v := range props {
|
||||
slice = append(slice, k+"="+v)
|
||||
}
|
||||
sort.Strings(slice)
|
||||
return slice
|
||||
}
|
||||
|
||||
func (t *TunnelHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||
if err := req.ParseForm(); err == nil {
|
||||
if action := req.PostFormValue("action"); action != "" {
|
||||
@ -90,9 +100,11 @@ func (t *TunnelHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||
fmt.Fprintf(rw, " <a href=\"/%s/color\">Tunnel page</a>\n", t.SAMTunnel.ID())
|
||||
fmt.Fprintf(rw, " </span>\n")
|
||||
}
|
||||
for key, value := range t.SAMTunnel.Props() {
|
||||
for _, value := range PropSort(t.SAMTunnel.Props()) {
|
||||
key := strings.SplitN(value, "=", 2)[0]
|
||||
val := strings.SplitN(value, "=", 2)[1]
|
||||
if key != "TunName" {
|
||||
t.Printdivf(key, key, value, rw, req)
|
||||
t.Printdivf(key, key, val, rw, req)
|
||||
}
|
||||
}
|
||||
if strings.HasSuffix(req.URL.Path, "color") {
|
||||
|
@ -30,11 +30,11 @@ func (h *Hasher) Friendly(input string) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return strings.Join(slice, "."), nil
|
||||
return strings.Join(slice, " "), nil
|
||||
}
|
||||
|
||||
func (h *Hasher) Unfriendly(input string) (string, error) {
|
||||
slice := strings.Split(input, ".")
|
||||
slice := strings.Split(input, " ")
|
||||
hash, err := h.hasher.Dehumanize(slice)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
@ -118,7 +118,11 @@ func (f *SAMClientForwarder) print() []string {
|
||||
|
||||
func (f *SAMClientForwarder) Props() map[string]string {
|
||||
r := make(map[string]string)
|
||||
for _, prop := range f.print() {
|
||||
print := f.print()
|
||||
print = append(print, "base32="+f.Base32())
|
||||
print = append(print, "base64="+f.Base64())
|
||||
print = append(print, "base32words="+f.Base32Readable())
|
||||
for _, prop := range print {
|
||||
k, v := sfi2pkeys.Prop(prop)
|
||||
r[k] = v
|
||||
}
|
||||
|
@ -142,7 +142,11 @@ func (f *SAMForwarder) print() []string {
|
||||
|
||||
func (f *SAMForwarder) Props() map[string]string {
|
||||
r := make(map[string]string)
|
||||
for _, prop := range f.print() {
|
||||
print := f.print()
|
||||
print = append(print, "base32="+f.Base32())
|
||||
print = append(print, "base64="+f.Base64())
|
||||
print = append(print, "base32words="+f.Base32Readable())
|
||||
for _, prop := range print {
|
||||
k, v := sfi2pkeys.Prop(prop)
|
||||
r[k] = v
|
||||
}
|
||||
|
@ -131,7 +131,11 @@ func (f *SAMSSUClientForwarder) print() []string {
|
||||
|
||||
func (f *SAMSSUClientForwarder) Props() map[string]string {
|
||||
r := make(map[string]string)
|
||||
for _, prop := range f.print() {
|
||||
print := f.print()
|
||||
print = append(print, "base32="+f.Base32())
|
||||
print = append(print, "base64="+f.Base64())
|
||||
print = append(print, "base32words="+f.Base32Readable())
|
||||
for _, prop := range print {
|
||||
k, v := sfi2pkeys.Prop(prop)
|
||||
r[k] = v
|
||||
}
|
||||
|
@ -129,7 +129,11 @@ func (f *SAMSSUForwarder) print() []string {
|
||||
|
||||
func (f *SAMSSUForwarder) Props() map[string]string {
|
||||
r := make(map[string]string)
|
||||
for _, prop := range f.print() {
|
||||
print := f.print()
|
||||
print = append(print, "base32="+f.Base32())
|
||||
print = append(print, "base64="+f.Base64())
|
||||
print = append(print, "base32words="+f.Base32Readable())
|
||||
for _, prop := range print {
|
||||
k, v := sfi2pkeys.Prop(prop)
|
||||
r[k] = v
|
||||
}
|
||||
|
Reference in New Issue
Block a user