implement browser created pastes
Signed-off-by: Xe Iaso <xe@tailscale.com>
This commit is contained in:
parent
49239f2830
commit
24b7c5452c
|
@ -9,6 +9,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -58,9 +59,17 @@ func main() {
|
||||||
q := url.Values{}
|
q := url.Values{}
|
||||||
|
|
||||||
q.Set("filename", filepath.Base(*fname))
|
q.Set("filename", filepath.Base(*fname))
|
||||||
q.Set("data", string(data))
|
q.Set("content", string(data))
|
||||||
|
|
||||||
resp, err := http.PostForm(u.String(), q)
|
req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(q.Encode))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("can't make HTTP request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
req.Header.Set("Accept", "text/plain")
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("can't post to %s: %v", u, err)
|
log.Fatalf("can't post to %s: %v", u, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,14 +124,15 @@ func (s *Server) TailnetSubmitPaste(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !r.Form.Has("filename") && !r.Form.Has("data") {
|
if !r.Form.Has("filename") && !r.Form.Has("content") {
|
||||||
|
log.Printf("%s", r.Form.Encode())
|
||||||
log.Printf("%s: posted form without filename and data", r.RemoteAddr)
|
log.Printf("%s: posted form without filename and data", r.RemoteAddr)
|
||||||
http.Error(w, "include form values filename and data", http.StatusBadRequest)
|
http.Error(w, "include form values filename and data", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fname := r.Form.Get("filename")
|
fname := r.Form.Get("filename")
|
||||||
data := r.Form.Get("data")
|
data := r.Form.Get("content")
|
||||||
id := uuid.NewString()
|
id := uuid.NewString()
|
||||||
|
|
||||||
q := `
|
q := `
|
||||||
|
@ -164,8 +165,14 @@ VALUES
|
||||||
|
|
||||||
log.Printf("new paste: %s", id)
|
log.Printf("new paste: %s", id)
|
||||||
|
|
||||||
|
switch r.Header.Get("Accept") {
|
||||||
|
case "text/plain":
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
fmt.Fprintf(w, "http://%s/paste/%s", r.Host, id)
|
fmt.Fprintf(w, "http://%s/paste/%s", r.Host, id)
|
||||||
|
default:
|
||||||
|
http.Redirect(w, r, fmt.Sprintf("http://%s/%s", r.Host, id), http.StatusTemporaryRedirect)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ShowPost(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) ShowPost(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
:root {
|
:root {
|
||||||
--background-color: 236;
|
--background-color: 0;
|
||||||
--text-color: 55;
|
--text-color: 43;
|
||||||
--accent-color: 200;
|
--accent-color: 344;
|
||||||
|
|
||||||
--width: 80ch;
|
--width: 80ch;
|
||||||
--padding: 0;
|
--padding: 0;
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
--pre-background-light: hsla(var(--background-color), 10%, 80%, 100%);
|
--pre-background-light: hsla(var(--background-color), 10%, 80%, 100%);
|
||||||
--a-background: hsla(var(--background-color), 90%, 5%, 100%);
|
--a-background: hsla(var(--background-color), 90%, 5%, 100%);
|
||||||
--a-background-light: hsla(var(--background-color), 30%, 90%, 100%);
|
--a-background-light: hsla(var(--background-color), 30%, 90%, 100%);
|
||||||
--a-color: hsla(var(--accent-color), 70%, 85%, 100%);
|
--a-color: hsla(var(--accent-color), 80%, 90%, 100%);
|
||||||
--a-color-light: hsla(var(--accent-color), 80%, 10%, 100%);
|
--a-color-light: hsla(var(--accent-color), 80%, 10%, 100%);
|
||||||
--blockquote-border: 0.5ch solid hsla(var(--accent-color), 80%, 80%, 100%);
|
--blockquote-border: 0.5ch solid hsla(var(--accent-color), 80%, 80%, 100%);
|
||||||
--blockquote-border-light: 0.5ch solid hsla(var(--accent-color), 50%, 30%, 100%);
|
--blockquote-border-light: 0.5ch solid hsla(var(--accent-color), 50%, 30%, 100%);
|
||||||
|
@ -59,7 +59,7 @@ pre {
|
||||||
}
|
}
|
||||||
|
|
||||||
a, a:active, a:visited {
|
a, a:active, a:visited {
|
||||||
color: var(--selection);
|
color: var(--a-color);
|
||||||
background-color: var(--a-background);
|
background-color: var(--a-background);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,3 +108,11 @@ footer {
|
||||||
padding: 0.5em 10px;
|
padding: 0.5em 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
white-space: pre-wrap; /* css-3 */
|
||||||
|
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||||
|
white-space: -pre-wrap; /* Opera 4-6 */
|
||||||
|
white-space: -o-pre-wrap; /* Opera 7 */
|
||||||
|
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<textarea name="content" rows=20 cols=80></textarea>
|
<textarea name="content" rows=20 cols=80></textarea>
|
||||||
<br />
|
<br />
|
||||||
<label for="filename">Filename:</label>
|
<label for="filename">Filename:</label>
|
||||||
<input type="text" id="filename" filename="filename" placeholder="filename.txt" />
|
<input type="text" id="filename" name="filename" value="filename.txt" />
|
||||||
<input type="submit" value="Submit" />
|
<input type="submit" value="Submit" />
|
||||||
</form>
|
</form>
|
||||||
{{template "footer" .}}
|
{{template "footer" .}}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{{template "header" .}}
|
{{template "header" .}}
|
||||||
|
|
||||||
<div class="right">{{.PasterDisplayName}} <img style="width:32px;height:32px" src="{{.PasterProfilePicURL}}" /></div>
|
<div class="right">{{.PasterDisplayName}} <img style="width:32px;height:32px" src="{{.PasterProfilePicURL}}" /></div>
|
||||||
|
|
||||||
<pre><code>
|
<pre><code>
|
||||||
{{.Data}}
|
{{.Data}}
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
Loading…
Reference in a new issue