Edit any files in user dir
This commit is contained in:
4
data/lancatlin@pm.me/expense.tpl
Normal file
4
data/lancatlin@pm.me/expense.tpl
Normal file
@@ -0,0 +1,4 @@
|
||||
{{ .Date }} {{ with .Name }}{{ . }}{{ else }}{{ .Destination }}{{ end }}
|
||||
{{ .Destination }} ${{ .Amount }}
|
||||
{{ with .Source }}{{ . }}{{ else }}cash{{ end }}
|
||||
|
||||
49
route.go
49
route.go
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"text/template"
|
||||
@@ -13,7 +14,7 @@ func router() *gin.Engine {
|
||||
r.HTMLRender = loadTemplates("templates")
|
||||
|
||||
r.GET("/", func(c *gin.Context) {
|
||||
HTML(c, 200, "index.html", nil)
|
||||
c.Redirect(303, "/dashboard")
|
||||
})
|
||||
|
||||
r.GET("/signup", func(c *gin.Context) {
|
||||
@@ -70,23 +71,43 @@ func router() *gin.Engine {
|
||||
})
|
||||
|
||||
authZone.GET("/edit", func(c *gin.Context) {
|
||||
user := getUser(c)
|
||||
f, err := user.ReadFile(DEFAULT_JOURNAL)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer f.Close()
|
||||
data, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
HTML(c, 200, "edit.html", string(data))
|
||||
c.Redirect(303, fmt.Sprintf("/edit/%s", DEFAULT_JOURNAL))
|
||||
})
|
||||
|
||||
authZone.POST("/edit", func(c *gin.Context) {
|
||||
authZone.GET("/edit/:filename", func(c *gin.Context) {
|
||||
user := getUser(c)
|
||||
filename := c.Param("filename")
|
||||
list, err := user.List()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
exists := contain(list, filename)
|
||||
var data []byte
|
||||
if exists {
|
||||
f, err := user.ReadFile(filename)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer f.Close()
|
||||
data, err = ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
HTML(c, 200, "edit.html", gin.H{
|
||||
"Data": string(data),
|
||||
"FileName": filename,
|
||||
"FileList": list,
|
||||
"Exists": exists,
|
||||
})
|
||||
})
|
||||
|
||||
authZone.POST("/edit/:filename", func(c *gin.Context) {
|
||||
user := getUser(c)
|
||||
filename := c.Param("filename")
|
||||
data := c.PostForm("data")
|
||||
err := user.overwriteFile(data)
|
||||
err := user.overwriteFile(filename, data)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,18 @@
|
||||
{{ define "title" }}編輯{{ end }}
|
||||
{{ define "main" }}
|
||||
<h1>編輯帳本</h1>
|
||||
<form action="/edit" method="POST">
|
||||
<textarea name="data" rows="15" cols="40">{{ . }}</textarea><br>
|
||||
<aside>
|
||||
<ul>
|
||||
{{ range .FileList }}
|
||||
<li><a href="/edit/{{ . }}">{{ . }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</aside>
|
||||
|
||||
<p>{{ .FileName }}{{ if not .Exists }} - New file{{ end }}</p>
|
||||
|
||||
<form action="/edit/{{ .FileName }}" method="POST">
|
||||
<textarea name="data" rows="15" cols="40">{{ .Data }}</textarea><br>
|
||||
<input type="submit" value="儲存">
|
||||
</form>
|
||||
{{ end }}
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
<ul>
|
||||
{{ with .User }}
|
||||
{{ .Email }}
|
||||
<li><a href="dashboard">儀表板</a></li>
|
||||
<li><a href="edit">編輯</a></li>
|
||||
<li><a href="download">下載</a></li>
|
||||
<li><a href="query">查詢</a></li>
|
||||
<li><a href="/dashboard">儀表板</a></li>
|
||||
<li><a href="/edit">編輯</a></li>
|
||||
<li><a href="/download">下載</a></li>
|
||||
<li><a href="/query">查詢</a></li>
|
||||
{{ end }}
|
||||
</nav>
|
||||
{{ block "main" .Data }}
|
||||
|
||||
4
tx.go
4
tx.go
@@ -36,8 +36,8 @@ func (u *User) appendToFile(tx string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (u *User) overwriteFile(tx string) (err error) {
|
||||
f, err := u.WriteFile(DEFAULT_JOURNAL)
|
||||
func (u *User) overwriteFile(filename string, tx string) (err error) {
|
||||
f, err := u.WriteFile(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
12
user.go
12
user.go
@@ -38,3 +38,15 @@ func (u *User) ReadFile(name string) (*os.File, error) {
|
||||
func (u *User) WriteFile(name string) (*os.File, error) {
|
||||
return u.File(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC)
|
||||
}
|
||||
|
||||
func (u *User) List() ([]string, error) {
|
||||
files, err := os.ReadDir(u.Dir())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
result := make([]string, len(files))
|
||||
for i, v := range files {
|
||||
result[i] = v.Name()
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user