- Timestamp:
- Jul 14, 2020, 9:22:08 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/morty.go
r120 r121 10 10 "flag" 11 11 "fmt" 12 "html/template" 12 13 "io" 13 14 "log" … … 187 188 } 188 189 189 var HTML_FORM_EXTENSION string = `<input type="hidden" name="mortyurl" value="%s" /><input type="hidden" name="mortyhash" value="%s" />` 190 191 var HTML_BODY_EXTENSION string = ` 192 <input type="checkbox" id="mortytoggle" autocomplete="off" /> 193 <div id="mortyheader"> 194 <form method="get"> 195 <label for="mortytoggle">hide</label> 196 <span><a href="/">Morty Proxy</a></span> 197 <input type="url" value="%s" name="mortyurl" readonly="true" /> 198 This is a <a href="https://github.com/asciimoo/morty">proxified and sanitized</a> view of the page, visit <a href="%s" rel="noreferrer">original site</a>. 199 </form> 200 </div> 201 <style> 202 body{ position: absolute !important; top: 42px !important; left: 0 !important; right: 0 !important; bottom: 0 !important; } 203 #mortyheader { position: fixed; margin: 0; box-sizing: border-box; -webkit-box-sizing: border-box; top: 0; left: 0; right: 0; z-index: 2147483647 !important; font-size: 12px; line-height: normal; border-width: 0px 0px 2px 0; border-style: solid; border-color: #AAAAAA; background: #FFF; padding: 4px; color: #444; height: 42px; } 204 #mortyheader p { padding: 0 0 0.7em 0; display: block; } 205 #mortyheader a { color: #3498db; font-weight: bold; display: inline; } 206 #mortyheader label { text-align: right; cursor: pointer; position: fixed; right: 4px; top: 4px; display: block; color: #444; } 207 #mortyheader > form > span { font-size: 24px; font-weight: bold; margin-right: 20px; margin-left: 20px; } 208 input[type=checkbox]#mortytoggle { display: none; } 209 input[type=checkbox]#mortytoggle:checked ~ div { display: none; visibility: hidden; } 210 #mortyheader input[type=url] { width: 50%%; padding: 4px; font-size: 16px; } 211 </style> 212 ` 213 190 type HTMLBodyExtParam struct { 191 BaseURL string 192 HasMortyKey bool 193 } 194 195 type HTMLFormExtParam struct { 196 BaseURL string 197 MortyKey string 198 } 199 200 var HTML_FORM_EXTENSION *template.Template 201 var HTML_BODY_EXTENSION *template.Template 214 202 var HTML_HEAD_CONTENT_TYPE string = `<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 215 203 <meta http-equiv="X-UA-Compatible" content="IE=edge"> … … 256 244 257 245 FAVICON_BYTES, _ = base64.StdEncoding.DecodeString(FaviconBase64) 246 var err error 247 HTML_FORM_EXTENSION, err = template.New("html_form_extension").Parse( 248 `<input type="hidden" name="mortyurl" value="{{.BaseURL}}" /><input type="hidden" name="mortyhash" value="{{.MortyKey}}" />`) 249 if err != nil { 250 panic(err) 251 } 252 HTML_BODY_EXTENSION, err = template.New("html_body_extension").Parse(` 253 <input type="checkbox" id="mortytoggle" autocomplete="off" /> 254 <div id="mortyheader"> 255 <form method="get"> 256 <label for="mortytoggle">hide</label> 257 <span><a href="/">Morty Proxy</a></span> 258 <input type="url" value="{{.BaseURL}}" name="mortyurl" {{if .HasMortyKey }}readonly="true"{{end}} /> 259 This is a <a href="https://github.com/asciimoo/morty">proxified and sanitized</a> view of the page, visit <a href="{{.BaseURL}}" rel="noreferrer">original site</a>. 260 </form> 261 </div> 262 <style> 263 body{ position: absolute !important; top: 42px !important; left: 0 !important; right: 0 !important; bottom: 0 !important; } 264 #mortyheader { position: fixed; margin: 0; box-sizing: border-box; -webkit-box-sizing: border-box; top: 0; left: 0; right: 0; z-index: 2147483647 !important; font-size: 12px; line-height: normal; border-width: 0px 0px 2px 0; border-style: solid; border-color: #AAAAAA; background: #FFF; padding: 4px; color: #444; height: 42px; } 265 #mortyheader p { padding: 0 0 0.7em 0; display: block; } 266 #mortyheader a { color: #3498db; font-weight: bold; display: inline; } 267 #mortyheader label { text-align: right; cursor: pointer; position: fixed; right: 4px; top: 4px; display: block; color: #444; } 268 #mortyheader > form > span { font-size: 24px; font-weight: bold; margin-right: 20px; margin-left: 20px; } 269 input[type=checkbox]#mortytoggle { display: none; } 270 input[type=checkbox]#mortytoggle:checked ~ div { display: none; visibility: hidden; } 271 #mortyheader input[type=url] { width: 50%; padding: 4px; font-size: 16px; } 272 </style> 273 `) 274 if err != nil { 275 panic(err) 276 } 258 277 } 259 278 … … 491 510 if param == nil { 492 511 param = ctx.PostArgs().PeekBytes(paramName) 493 if param != nil { 494 ctx.PostArgs().DelBytes(paramName) 495 } 496 } else { 497 ctx.QueryArgs().DelBytes(paramName) 498 } 512 ctx.PostArgs().DelBytes(paramName) 513 } 514 ctx.QueryArgs().DelBytes(paramName) 499 515 500 516 return param … … 640 656 key = hash(urlStr, rc.Key) 641 657 } 642 fmt.Fprintf(out, HTML_FORM_EXTENSION, urlStr, key) 643 658 err := HTML_FORM_EXTENSION.Execute(out, HTMLFormExtParam{urlStr, key}) 659 if err != nil { 660 if DEBUG { 661 fmt.Println("failed to inject body extension", err) 662 } 663 } 644 664 } 645 665 … … 649 669 switch string(tag) { 650 670 case "body": 651 fmt.Fprintf(out, HTML_BODY_EXTENSION, rc.BaseURL.String(), rc.BaseURL.String()) 671 p := HTMLBodyExtParam{rc.BaseURL.String(), false} 672 if len(rc.Key) > 0 { 673 p.HasMortyKey = true 674 } 675 err := HTML_BODY_EXTENSION.Execute(out, p) 676 if err != nil { 677 if DEBUG { 678 fmt.Println("failed to inject body extension", err) 679 } 680 } 652 681 case "style": 653 682 state = STATE_DEFAULT
Note:
See TracChangeset
for help on using the changeset viewer.