feature (static): upate a few static pages

- /about now shows a list of installed plugin
- 404 page is more "funky"
This commit is contained in:
Mickael Kerjean
2022-01-20 17:15:49 +11:00
parent e419b19b61
commit a95fad4d13
7 changed files with 321 additions and 3025 deletions

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 137 KiB

2
go.mod
View File

@ -1,6 +1,6 @@
module github.com/mickael-kerjean/filestash
go 1.13
go 1.16
require (
github.com/aws/aws-sdk-go v1.40.41

View File

@ -1,6 +1,7 @@
package ctrl
import (
_ "embed"
"fmt"
. "github.com/mickael-kerjean/filestash/server/common"
"io"
@ -8,10 +9,14 @@ import (
URL "net/url"
"os"
"path/filepath"
"regexp"
"strings"
"text/template"
)
//go:embed static/404.html
var HtmlPage404 []byte
func StaticHandler(_path string) func(App, http.ResponseWriter, *http.Request) {
return func(ctx App, res http.ResponseWriter, req *http.Request) {
var base string = GetAbsolutePath(_path)
@ -65,20 +70,40 @@ func IndexHandler(_path string) func(App, http.ResponseWriter, *http.Request) {
func NotFoundHandler(ctx App, res http.ResponseWriter, req *http.Request) {
res.WriteHeader(http.StatusNotFound)
res.Write([]byte(Page(`<img style="max-width:800px" src="/assets/icons/404.svg" />`)))
res.Write(HtmlPage404)
}
var listOfPlugins map[string][]string = map[string][]string{
"oss": []string{},
"enterprise": []string{},
"custom": []string{},
}
func AboutHandler(ctx App, res http.ResponseWriter, req *http.Request) {
t, _ := template.New("about").Parse(Page(`
<h1> {{index .App 0}} </h1>
<table>
<tr> <td> Commit hash </td> <td> {{ index .App 1}} </td> </tr>
<tr> <td style="width:150px;"> Commit hash </td> <td> <a href="https://github.com/mickael-kerjean/filestash/tree/{{ index .App 1}}">{{ index .App 1}}</a> </td> </tr>
<tr> <td> Binary hash </td> <td> {{ index .App 2}} </td> </tr>
<tr> <td> Config hash </td> <td> {{ index .App 3}} </td> </tr>
<tr>
<td> Plugins </td>
<td>
{{ $oss := (index .App 4) }}
{{ $enterprise := (index .App 5) }}
{{ $custom := (index .App 6) }}
STANDARD[<span class="small">{{ if eq $oss "" }}N/A{{ else }}{{ $oss }}{{ end }}</span>]<br/>
EXTENDED[<span class="small">{{ if eq $enterprise "" }}N/A{{ else }}{{ $enterprise }}{{ end }}</span>]<br/>
CUSTOM[<span class="small">{{ if eq $custom "" }}N/A{{ else }}{{ $custom }}{{ end }}</span>]
</td>
</tr>
</table>
<style>
table { margin: 0 auto; font-family: monospace; opacity: 0.8; }
td { text-align: right; padding-left: 10px; }
table { margin: 0 auto; font-family: monospace; opacity: 0.8; max-width: 1000px; width: 95%;}
table td { text-align: right; padding-left: 10px; vertical-align: top; }
table td span.small { font-size:0.8rem; }
table a { color: inherit; text-decoration: none; }
</style>
`))
t.Execute(res, struct {
@ -88,9 +113,43 @@ func AboutHandler(ctx App, res http.ResponseWriter, req *http.Request) {
BUILD_REF,
hashFileContent(filepath.Join(GetCurrentDir(), "/filestash"), 0),
hashFileContent(filepath.Join(GetCurrentDir(), CONFIG_PATH, "config.json"), 0),
strings.Join(listOfPlugins["oss"], " "),
strings.Join(listOfPlugins["enterprise"], " "),
strings.Join(listOfPlugins["custom"], " "),
}})
}
func InitPluginList(code []byte) {
listOfPackages := regexp.MustCompile(`github.com/mickael-kerjean/([^\"]+)`).FindAllString(string(code), -1)
for _, packageName := range listOfPackages {
if packageName == "github.com/mickael-kerjean/filestash/server/common" {
continue
}
if strings.HasPrefix(packageName, "github.com/mickael-kerjean/filestash/server/plugin/") {
listOfPlugins["oss"] = append(
listOfPlugins["oss"],
strings.TrimPrefix(packageName, "github.com/mickael-kerjean/filestash/server/plugin/"),
)
} else if strings.HasPrefix(packageName, "github.com/mickael-kerjean/filestash/filestash-enterprise/plugins/") {
listOfPlugins["enterprise"] = append(
listOfPlugins["enterprise"],
strings.TrimPrefix(packageName, "github.com/mickael-kerjean/filestash/filestash-enterprise/plugins/"),
)
} else if strings.HasPrefix(packageName, "github.com/mickael-kerjean/filestash/filestash-enterprise/customers/") {
listOfPlugins["custom"] = append(
listOfPlugins["custom"],
strings.TrimPrefix(packageName, "github.com/mickael-kerjean/filestash/filestash-enterprise/customers/"),
)
} else {
listOfPlugins["custom"] = append(
listOfPlugins["custom"],
packageName,
)
}
}
}
func CustomCssHandler(ctx App, res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/css")
io.WriteString(res, Config.Get("general.custom_css").String())

214
server/ctrl/static/404.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
package main
import (
_ "embed"
"fmt"
"github.com/gorilla/mux"
. "github.com/mickael-kerjean/filestash/server/common"
@ -15,6 +16,9 @@ import (
"strconv"
)
//go:embed plugin/index.go
var EmbedPluginList []byte
func main() {
app := App{}
Init(&app)
@ -125,6 +129,10 @@ func Init(a *App) {
Log.Warning("No starter plugin available")
return
}
go func() {
InitPluginList(EmbedPluginList)
}()
select {}
}

View File

@ -39,7 +39,8 @@ func IndexHeaders(fn func(App, http.ResponseWriter, *http.Request)) func(ctx App
cspHeader += "style-src 'self' 'unsafe-inline'; "
cspHeader += "font-src 'self' data:; "
cspHeader += "manifest-src 'self'; "
cspHeader += "script-src 'self' 'sha256-JNAde5CZQqXtYRLUk8CGgyJXo6C7Zs1lXPPClLM1YM4=' 'sha256-9/gQeQaAmVkFStl6tfCbHXn8mr6PgtxlH+hEp685lzY=' 'sha256-ER9LZCe8unYk8AJJ2qopE+rFh7OUv8QG5q3h6jZeoSk='; "
cspHeader += "script-src 'self' 'sha256-JNAde5CZQqXtYRLUk8CGgyJXo6C7Zs1lXPPClLM1YM4=' 'sha256-9/gQeQaAmVkFStl6tfCbHXn8mr6PgtxlH+hEp685lzY=' 'sha256-ER9LZCe8unYk8AJJ2qopE+rFh7OUv8QG5q3h6jZeoSk='"
cspHeader += " 'sha256-a4rv66tC4bqKBcGxkR+KAqedm+64tAs13VGNGmN3B6g=' 'sha256-H+2cw33TxgqSZEshY66vGwg6/W03IB9JKTmFV36CKz0=';" // animated 404 static page
cspHeader += "img-src 'self' blob: data: https://maps.wikimedia.org; "
cspHeader += "connect-src 'self'; "
cspHeader += "object-src 'self'; "

33
vendor/modules.txt vendored
View File

@ -1,6 +1,7 @@
# cloud.google.com/go v0.38.0
cloud.google.com/go/compute/metadata
# github.com/aws/aws-sdk-go v1.40.41
## explicit
github.com/aws/aws-sdk-go/aws
github.com/aws/aws-sdk-go/aws/arn
github.com/aws/aws-sdk-go/aws/awserr
@ -55,12 +56,15 @@ github.com/aws/aws-sdk-go/service/sts/stsiface
# github.com/creack/pty v1.1.9
github.com/creack/pty
# github.com/cretz/bine v0.1.0
## explicit
github.com/cretz/bine/control
github.com/cretz/bine/process
github.com/cretz/bine/tor
github.com/cretz/bine/torutil
github.com/cretz/bine/torutil/ed25519
github.com/cretz/bine/torutil/ed25519/internal/edwards25519
# github.com/crewjam/saml v0.4.6
## explicit
# github.com/davecgh/go-spew v1.1.1
github.com/davecgh/go-spew/spew
# github.com/emirpasic/gods v1.12.0
@ -71,6 +75,7 @@ github.com/emirpasic/gods/trees
github.com/emirpasic/gods/trees/binaryheap
github.com/emirpasic/gods/utils
# github.com/go-sql-driver/mysql v1.5.0
## explicit
github.com/go-sql-driver/mysql
# github.com/golang/protobuf v1.3.1
github.com/golang/protobuf/proto
@ -81,14 +86,18 @@ github.com/golang/protobuf/ptypes/timestamp
# github.com/googleapis/gax-go/v2 v2.0.5
github.com/googleapis/gax-go/v2
# github.com/gorilla/mux v1.7.3
## explicit
github.com/gorilla/mux
# github.com/gorilla/websocket v1.4.1
## explicit
github.com/gorilla/websocket
# github.com/h2non/bimg v1.1.5
## explicit
github.com/h2non/bimg
# github.com/hashicorp/golang-lru v0.5.1
github.com/hashicorp/golang-lru/simplelru
# github.com/hirochachacha/go-smb2 v1.0.2
## explicit
github.com/hirochachacha/go-smb2
github.com/hirochachacha/go-smb2/internal/crypto/ccm
github.com/hirochachacha/go-smb2/internal/crypto/cmac
@ -107,26 +116,35 @@ github.com/kevinburke/ssh_config
# github.com/kr/fs v0.1.0
github.com/kr/fs
# github.com/kr/pty v1.1.8
## explicit
github.com/kr/pty
# github.com/mattn/go-sqlite3 v2.0.2+incompatible
## explicit
github.com/mattn/go-sqlite3
# github.com/mickael-kerjean/net v0.0.0-20191120063050-2457c043ba06
## explicit
github.com/mickael-kerjean/net/webdav
github.com/mickael-kerjean/net/webdav/internal/xml
# github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/go-homedir
# github.com/mitchellh/hashstructure v1.0.0
## explicit
github.com/mitchellh/hashstructure
# github.com/patrickmn/go-cache v2.1.0+incompatible
## explicit
github.com/patrickmn/go-cache
# github.com/pkg/errors v0.9.1
github.com/pkg/errors
# github.com/pkg/sftp v1.11.0
## explicit
github.com/pkg/sftp
# github.com/pmezard/go-difflib v1.0.0
github.com/pmezard/go-difflib/difflib
# github.com/prasad83/goftp v0.0.0-20210325080443-f57aaed46a32
## explicit
github.com/prasad83/goftp
# github.com/secsy/goftp v0.0.0-20200609142545-aa2de14babf4
## explicit
# github.com/sergi/go-diff v1.0.0
github.com/sergi/go-diff/diffmatchpatch
# github.com/src-d/gcfg v1.4.0
@ -135,14 +153,17 @@ github.com/src-d/gcfg/scanner
github.com/src-d/gcfg/token
github.com/src-d/gcfg/types
# github.com/stretchr/testify v1.7.0
## explicit
github.com/stretchr/testify/assert
# github.com/tidwall/gjson v1.13.0
## explicit
github.com/tidwall/gjson
# github.com/tidwall/match v1.1.1
github.com/tidwall/match
# github.com/tidwall/pretty v1.2.0
github.com/tidwall/pretty
# github.com/tidwall/sjson v1.0.4
## explicit
github.com/tidwall/sjson
# github.com/xanzy/ssh-agent v0.2.1
github.com/xanzy/ssh-agent
@ -164,6 +185,7 @@ go.opencensus.io/trace/internal
go.opencensus.io/trace/propagation
go.opencensus.io/trace/tracestate
# golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871
## explicit
golang.org/x/crypto/acme
golang.org/x/crypto/acme/autocert
golang.org/x/crypto/bcrypt
@ -189,9 +211,11 @@ golang.org/x/crypto/ssh/agent
golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
golang.org/x/crypto/ssh/knownhosts
# golang.org/x/image v0.0.0-20210622092929-e6eecd499c2c
## explicit
golang.org/x/image/draw
golang.org/x/image/math/f64
# golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2
## explicit
golang.org/x/net/context
golang.org/x/net/context/ctxhttp
golang.org/x/net/http/httpguts
@ -203,12 +227,14 @@ golang.org/x/net/internal/timeseries
golang.org/x/net/proxy
golang.org/x/net/trace
# golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
## explicit
golang.org/x/oauth2
golang.org/x/oauth2/google
golang.org/x/oauth2/internal
golang.org/x/oauth2/jws
golang.org/x/oauth2/jwt
# golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
## explicit
golang.org/x/sync/semaphore
# golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1
golang.org/x/sys/cpu
@ -221,6 +247,7 @@ golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
# google.golang.org/api v0.15.0
## explicit
google.golang.org/api/drive/v3
google.golang.org/api/googleapi
google.golang.org/api/googleapi/transport
@ -277,12 +304,17 @@ google.golang.org/grpc/stats
google.golang.org/grpc/status
google.golang.org/grpc/tap
# gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
## explicit
gopkg.in/alexcesaro/quotedprintable.v3
# gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d
gopkg.in/asn1-ber.v1
# gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
## explicit
gopkg.in/gomail.v2
# gopkg.in/ldap.v2 v2.5.1
## explicit
# gopkg.in/ldap.v3 v3.1.0
## explicit
gopkg.in/ldap.v3
# gopkg.in/src-d/go-billy.v4 v4.3.2
gopkg.in/src-d/go-billy.v4
@ -291,6 +323,7 @@ gopkg.in/src-d/go-billy.v4/helper/polyfill
gopkg.in/src-d/go-billy.v4/osfs
gopkg.in/src-d/go-billy.v4/util
# gopkg.in/src-d/go-git.v4 v4.13.1
## explicit
gopkg.in/src-d/go-git.v4
gopkg.in/src-d/go-git.v4/config
gopkg.in/src-d/go-git.v4/internal/revision