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
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"text/template"
|
"text/template"
|
||||||
@@ -13,7 +14,7 @@ func router() *gin.Engine {
|
|||||||
r.HTMLRender = loadTemplates("templates")
|
r.HTMLRender = loadTemplates("templates")
|
||||||
|
|
||||||
r.GET("/", func(c *gin.Context) {
|
r.GET("/", func(c *gin.Context) {
|
||||||
HTML(c, 200, "index.html", nil)
|
c.Redirect(303, "/dashboard")
|
||||||
})
|
})
|
||||||
|
|
||||||
r.GET("/signup", func(c *gin.Context) {
|
r.GET("/signup", func(c *gin.Context) {
|
||||||
@@ -70,23 +71,43 @@ func router() *gin.Engine {
|
|||||||
})
|
})
|
||||||
|
|
||||||
authZone.GET("/edit", func(c *gin.Context) {
|
authZone.GET("/edit", func(c *gin.Context) {
|
||||||
user := getUser(c)
|
c.Redirect(303, fmt.Sprintf("/edit/%s", DEFAULT_JOURNAL))
|
||||||
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))
|
|
||||||
})
|
})
|
||||||
|
|
||||||
authZone.POST("/edit", func(c *gin.Context) {
|
authZone.GET("/edit/:filename", func(c *gin.Context) {
|
||||||
user := getUser(c)
|
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")
|
data := c.PostForm("data")
|
||||||
err := user.overwriteFile(data)
|
err := user.overwriteFile(filename, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,18 @@
|
|||||||
{{ define "title" }}編輯{{ end }}
|
{{ define "title" }}編輯{{ end }}
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<h1>編輯帳本</h1>
|
<h1>編輯帳本</h1>
|
||||||
<form action="/edit" method="POST">
|
<aside>
|
||||||
<textarea name="data" rows="15" cols="40">{{ . }}</textarea><br>
|
<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="儲存">
|
<input type="submit" value="儲存">
|
||||||
</form>
|
</form>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
<ul>
|
<ul>
|
||||||
{{ with .User }}
|
{{ with .User }}
|
||||||
{{ .Email }}
|
{{ .Email }}
|
||||||
<li><a href="dashboard">儀表板</a></li>
|
<li><a href="/dashboard">儀表板</a></li>
|
||||||
<li><a href="edit">編輯</a></li>
|
<li><a href="/edit">編輯</a></li>
|
||||||
<li><a href="download">下載</a></li>
|
<li><a href="/download">下載</a></li>
|
||||||
<li><a href="query">查詢</a></li>
|
<li><a href="/query">查詢</a></li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</nav>
|
</nav>
|
||||||
{{ block "main" .Data }}
|
{{ block "main" .Data }}
|
||||||
|
|||||||
4
tx.go
4
tx.go
@@ -36,8 +36,8 @@ func (u *User) appendToFile(tx string) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *User) overwriteFile(tx string) (err error) {
|
func (u *User) overwriteFile(filename string, tx string) (err error) {
|
||||||
f, err := u.WriteFile(DEFAULT_JOURNAL)
|
f, err := u.WriteFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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) {
|
func (u *User) WriteFile(name string) (*os.File, error) {
|
||||||
return u.File(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC)
|
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