read only mode a gogo
parent
d6c95a536c
commit
952e04815a
|
|
@ -19,6 +19,7 @@ var (
|
|||
Foot string
|
||||
OAuthServer string
|
||||
VersionInterval time.Duration
|
||||
ReadOnly bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
|
@ -36,11 +37,12 @@ func Refresh() {
|
|||
as.Append(args.STRING, "wrap", "file with http header/footer", "")
|
||||
as.Append(args.STRING, "oauth", "oauth URL", "")
|
||||
as.Append(args.DURATION, "version", "duration to mark versions", "0s")
|
||||
as.Append(args.BOOL, "ro", "read-only mode", false)
|
||||
if err := as.Parse(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
wrap := as.Get("wrap").GetString()
|
||||
wrap := as.GetString("wrap")
|
||||
var b []byte
|
||||
if len(wrap) > 0 {
|
||||
log.Printf("reading %v (%T)", wrap, wrap)
|
||||
|
|
@ -57,13 +59,14 @@ func Refresh() {
|
|||
panic(len(bs))
|
||||
}
|
||||
|
||||
Root = strings.TrimSuffix(as.Get("root").GetString(), "/")
|
||||
Root = strings.TrimSuffix(as.GetString("root"), "/")
|
||||
Root, _ = filepath.Abs(Root)
|
||||
Port = ":" + strings.TrimPrefix(as.Get("port").GetString(), ":")
|
||||
Port = ":" + strings.TrimPrefix(as.GetString("port"), ":")
|
||||
Head = string(bs[0])
|
||||
Foot = string(bs[1])
|
||||
OAuthServer = as.Get("oauth").GetString()
|
||||
VersionInterval = as.Get("version").GetDuration()
|
||||
OAuthServer = as.GetString("oauth")
|
||||
VersionInterval = as.GetDuration("version")
|
||||
ReadOnly = as.GetBool("ro")
|
||||
}
|
||||
|
||||
const defaultWrapper = `
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package server
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"local/notes-server/config"
|
||||
"local/notes-server/filetree"
|
||||
"net/http"
|
||||
"path"
|
||||
|
|
@ -58,18 +59,27 @@ func fileHead(w http.ResponseWriter, baseHREF string) {
|
|||
}
|
||||
|
||||
func htmlEdit(w http.ResponseWriter, baseHREF string) {
|
||||
if config.ReadOnly {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, `<div style='display:inline-block'>
|
||||
<a href=%q><input type="button" value="Edit"></input></a>
|
||||
</div><br>`, path.Join("/edit/", baseHREF))
|
||||
}
|
||||
|
||||
func htmlDelete(w http.ResponseWriter, baseHREF string) {
|
||||
if config.ReadOnly {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, `<div style='display:inline-block'>
|
||||
<a href=%q><input type="button" value="Delete" onclick="return confirm('Delete?');"></input></a>
|
||||
</div><br>`, path.Join("/delete/", baseHREF))
|
||||
}
|
||||
|
||||
func htmlCreate(w http.ResponseWriter, baseHREF string) {
|
||||
if config.ReadOnly {
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, `
|
||||
<form action=%q method="get">
|
||||
<input type="text" name="base"></input>
|
||||
|
|
|
|||
|
|
@ -3,49 +3,50 @@ package server
|
|||
import (
|
||||
"fmt"
|
||||
"local/gziphttp"
|
||||
"local/notes-server/config"
|
||||
"local/router"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s *Server) Routes() error {
|
||||
wildcard := router.Wildcard
|
||||
endpoints := []struct {
|
||||
path string
|
||||
endpoints := map[string]struct {
|
||||
handler http.HandlerFunc
|
||||
}{
|
||||
{
|
||||
path: "/",
|
||||
"/": {
|
||||
handler: s.root,
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("notes/%s%s", wildcard, wildcard),
|
||||
fmt.Sprintf("notes/%s%s", wildcard, wildcard): {
|
||||
handler: s.gzip(s.authenticate(s.notes)),
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("edit/%s%s", wildcard, wildcard),
|
||||
fmt.Sprintf("edit/%s%s", wildcard, wildcard): {
|
||||
handler: s.gzip(s.authenticate(s.edit)),
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("delete/%s%s", wildcard, wildcard),
|
||||
fmt.Sprintf("delete/%s%s", wildcard, wildcard): {
|
||||
handler: s.gzip(s.authenticate(s.delete)),
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("submit/%s%s", wildcard, wildcard),
|
||||
fmt.Sprintf("submit/%s%s", wildcard, wildcard): {
|
||||
handler: s.gzip(s.authenticate(s.submit)),
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("create/%s%s", wildcard, wildcard),
|
||||
fmt.Sprintf("create/%s%s", wildcard, wildcard): {
|
||||
handler: s.gzip(s.authenticate(s.create)),
|
||||
},
|
||||
{
|
||||
path: fmt.Sprintf("search"),
|
||||
fmt.Sprintf("search"): {
|
||||
handler: s.gzip(s.authenticate(s.search)),
|
||||
},
|
||||
}
|
||||
|
||||
for _, endpoint := range endpoints {
|
||||
if err := s.Add(endpoint.path, endpoint.handler); err != nil {
|
||||
for path, endpoint := range endpoints {
|
||||
if config.ReadOnly {
|
||||
for _, prefix := range []string{"edit/", "delete/", "delete/", "create/", "submit/"} {
|
||||
if strings.HasPrefix(path, prefix) {
|
||||
endpoint.handler = http.NotFound
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := s.Add(path, endpoint.handler); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue