Edit any files in user dir

This commit is contained in:
Wancat
2022-11-16 01:48:55 +08:00
parent 22229fc5bc
commit f5ace34852
7 changed files with 79 additions and 22 deletions

View File

@@ -0,0 +1,4 @@
{{ .Date }} {{ with .Name }}{{ . }}{{ else }}{{ .Destination }}{{ end }}
{{ .Destination }} ${{ .Amount }}
{{ with .Source }}{{ . }}{{ else }}cash{{ end }}

View File

@@ -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) {
c.Redirect(303, fmt.Sprintf("/edit/%s", DEFAULT_JOURNAL))
})
authZone.GET("/edit/:filename", func(c *gin.Context) {
user := getUser(c)
f, err := user.ReadFile(DEFAULT_JOURNAL)
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)
data, err = ioutil.ReadAll(f)
if err != nil {
panic(err)
}
HTML(c, 200, "edit.html", string(data))
}
HTML(c, 200, "edit.html", gin.H{
"Data": string(data),
"FileName": filename,
"FileList": list,
"Exists": exists,
})
})
authZone.POST("/edit", func(c *gin.Context) {
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)
}

View File

@@ -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 }}

View File

@@ -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
View File

@@ -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
View File

@@ -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
}

10
utils.go Normal file
View File

@@ -0,0 +1,10 @@
package main
func contain[T comparable](arr []T, elem T) bool {
for _, v := range arr {
if v == elem {
return true
}
}
return false
}