diff options
Diffstat (limited to 'cmd/web')
| -rw-r--r-- | cmd/web/app.go | 1 | ||||
| -rw-r--r-- | cmd/web/handlers.go | 16 | ||||
| -rw-r--r-- | cmd/web/main.go | 9 | ||||
| -rw-r--r-- | cmd/web/templates/index.html | 45 | ||||
| -rw-r--r-- | cmd/web/util.go | 34 |
5 files changed, 90 insertions, 15 deletions
diff --git a/cmd/web/app.go b/cmd/web/app.go index 1050343..bc8385a 100644 --- a/cmd/web/app.go +++ b/cmd/web/app.go @@ -30,6 +30,7 @@ type statusInfo struct { type App struct { Library *steamLib Status *statusInfo + Demo bool Templates *template.Template diff --git a/cmd/web/handlers.go b/cmd/web/handlers.go index 661c411..4b86b58 100644 --- a/cmd/web/handlers.go +++ b/cmd/web/handlers.go @@ -28,19 +28,19 @@ func (a *App) HandleIndex(w http.ResponseWriter, r *http.Request) { err := a.Templates.ExecuteTemplate(w, "index", struct { - Lib *steam.Library - Info *statusInfo - Local bool - HostIP string - Port string - Version string + Lib *steam.Library + Info *statusInfo + Local bool + ShareLink string + Version string + Demo bool }{ &a.Library.Library, a.Status, isLocal(r.RemoteAddr), - GetHostIP(), - getPort(), + getShareLink(), Version, + a.Demo, }) if err != nil { Logger.Printf("While Rendering template: %s", err) diff --git a/cmd/web/main.go b/cmd/web/main.go index 7475478..c799624 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -32,6 +32,11 @@ func main() { debug := fl.Bool("d", false, "Print line numbers in log") fl.StringVar(&Listen, "l", Listen, "What address do we listen on?") fl.StringVar(&DefaultLib, "L", DefaultLib, "Full path to default library") + fl.StringVar(&isLocalCIDR, "t", isLocalCIDR, + "Trusted CIDRs for additional controls, seperated by commas") + fl.StringVar(&shareLink, "s", shareLink, "Share link, if blank make an educated guess") + isDemo := fl.Bool("demo", false, + "Whether or not to run in demo mode. You probably don't want this on.") fl.Parse(os.Args[1:]) if *debug { @@ -43,6 +48,10 @@ func main() { Logger.Fatal(err) } + if *isDemo { + a.Demo = true + } + go a.installer() r := mux.NewRouter() diff --git a/cmd/web/templates/index.html b/cmd/web/templates/index.html index eaaf722..6f015af 100644 --- a/cmd/web/templates/index.html +++ b/cmd/web/templates/index.html @@ -26,15 +26,24 @@ <div class="collapse navbar-collapse" id="navbarsExampleDefault"> <ul class="navbar-nav me-auto mb-2 mb-md-0"> <li class="nav-item"> + {{ if .Demo }} + <span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" + data-bs-placement="bottom" title="Disabled for demo"> + <a class="nav-link disabled" aria-current="page" href="#"> + Download + </a> + </span> + {{ else }} <a class="nav-link" aria-current="page" href="/steam-export-web.exe"> Download </a> + {{ end }} </li> <li class="nav-item"> <a href="#" id="shareLink" - data-clipboard-text="http://{{$.HostIP}}:{{$.Port}}/" + data-clipboard-text="{{$.ShareLink}}" class="nav-link"> Copy Share link </a> @@ -69,9 +78,11 @@ Version </a> </li> + {{if .Demo}}{{else}} <li class="nav-item"> <a class="nav-link" href="/quit">Shutdown Server/Quit</a> </li> + {{end}} {{ end }} </ul> </div> @@ -114,28 +125,37 @@ <p> It also allows you to import games from across the network as well if you provide an HTTP url from which to download the game file as exported - from this application. + from this application. {{ if .Demo }}Downloads are however disabled for the + demo.{{end}} </p> <p> + {{ if .Demo }} + You would normally be able to download the application from here, but it's + disabled for the demo. See + <a href="https://git.riedstra.dev/mitch/steam-export/about/">here</a> for more info. + {{ else }} <a href="/steam-export-web.exe"> You can download this application from this UI as well here. </a> + {{ end }} </p> <p> You can give people this link to view the library remotely and download games from your computer: <br /><br /> - <a href="http://{{.HostIP}}:{{.Port}}/">http://{{.HostIP}}:{{.Port}}/</a> + <a href="{{.ShareLink}}">{{.ShareLink}}</a> </p> {{ else }} <h2>Remote Steam library access</h2> <p> + {{ if .Demo }}{{ else }} <a href="/steam-export-web.exe"> If you need this program to install the games click here. </a> + {{ end }} </p> {{ end }} @@ -167,8 +187,15 @@ <td>{{$key}}</td> <td>{{$val.GetSize}}</td> <td> + {{if $.Demo}} + <span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" + data-bs-placement="left" title="Disabled for demo"> + <a href="#" class="btn btn-secondary disabled">Download</a> + </span> + {{ else }} <a href="/download/{{$key}}" class="btn btn-secondary">Download</a> - <button data-clipboard-text="http://{{$.HostIP}}:{{$.Port}}/download/{{$key}}" class="btn btn-primary">Copy link</button> + {{ end }} + <button data-clipboard-text="{{$.ShareLink}}download/{{$key}}" class="btn btn-primary">Copy link</button> <button data-bs-target="#delete{{$val.Slug}}Modal" data-bs-toggle="modal" class="btn btn-danger">Delete</button> </td> </tr> @@ -357,7 +384,8 @@ </div> <!-- /container --> -<script src="static/js/bootstrap.min.js"></script> +<!-- <script src="static/js/bootstrap.min.js"></script> --> +<script src="static/js/bootstrap.bundle.min.js"></script> <script src="static/js/clipboard.min.js"></script> <script src="static/js/tablesort/tablesort.min.js"></script> <script src="static/js/tablesort/sorts/tablesort.filesize.min.js"></script> @@ -415,4 +443,11 @@ toast.show() } } </script> +<script> + var tooltipTriggerList = + [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) + var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl) + }) +</script> </body> diff --git a/cmd/web/util.go b/cmd/web/util.go index 2c32922..454912f 100644 --- a/cmd/web/util.go +++ b/cmd/web/util.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "io" "net" "net/http" @@ -22,9 +23,38 @@ func UnauthorizedIfNotLocal(h http.Handler) http.Handler { }) } +var isLocalCIDR = "127.0.0.1/8" + func isLocal(addr string) bool { - _, localNet, _ := net.ParseCIDR("127.0.0.1/8") - return localNet.Contains(net.ParseIP(strings.Split(addr, ":")[0])) + if strings.Contains(isLocalCIDR, ",") { + for _, cidr := range strings.Split(isLocalCIDR, ",") { + _, localNet, err := net.ParseCIDR(cidr) + if err != nil { + panic(err) + } + if localNet.Contains(net.ParseIP(strings.Split(addr, ":")[0])) { + return true + } + } + + return false + } else { + _, localNet, err := net.ParseCIDR(isLocalCIDR) + if err != nil { + panic(err) + } + return localNet.Contains(net.ParseIP(strings.Split(addr, ":")[0])) + } +} + +var shareLink = "" + +func getShareLink() string { + if shareLink != "" { + return shareLink + } + + return fmt.Sprintf("http://%s:%s/", GetHostIP(), getPort()) } // GetHostIP attempts to guess the IP address of the current machine and |
