mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-11-02 11:57:04 +08:00
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:
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 137 KiB |
2
go.mod
2
go.mod
@ -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
|
||||
|
||||
@ -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
214
server/ctrl/static/404.html
Normal file
File diff suppressed because one or more lines are too long
@ -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 {}
|
||||
}
|
||||
|
||||
|
||||
@ -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
33
vendor/modules.txt
vendored
@ -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
|
||||
|
||||
Reference in New Issue
Block a user