sqlite access added
This commit is contained in:
@@ -2,7 +2,6 @@ dump.rdb
|
|||||||
bin/
|
bin/
|
||||||
node_modules/
|
node_modules/
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
database.sqlite
|
|
||||||
database.sqlite-journal
|
database.sqlite-journal
|
||||||
.DS_Store
|
.DS_Store
|
||||||
vendor
|
vendor
|
||||||
|
|||||||
Generated
+13
-1
@@ -25,6 +25,12 @@
|
|||||||
revision = "fc9e8d8ef48496124e79ae0df75490096eccf6fe"
|
revision = "fc9e8d8ef48496124e79ae0df75490096eccf6fe"
|
||||||
version = "v0.0.2"
|
version = "v0.0.2"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-sqlite3"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "ca5e3819723d8eeaf170ad510e7da1d6d2e94a08"
|
||||||
|
version = "v1.2.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/russross/blackfriday"
|
name = "github.com/russross/blackfriday"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
@@ -55,6 +61,12 @@
|
|||||||
packages = ["acme","acme/autocert"]
|
packages = ["acme","acme/autocert"]
|
||||||
revision = "81e90905daefcd6fd217b62423c0908922eadb30"
|
revision = "81e90905daefcd6fd217b62423c0908922eadb30"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/net"
|
||||||
|
packages = ["context"]
|
||||||
|
revision = "66aacef3dd8a676686c7ae3716979581e8b03c47"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "golang.org/x/sys"
|
name = "golang.org/x/sys"
|
||||||
@@ -64,6 +76,6 @@
|
|||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "a39fe24a6fa292ee2a7c5dabd94c32271f0c0cc16d928c8f1113600c76fb6d1f"
|
inputs-digest = "6cae41086ddec63b527c56e9e182bb69c9e1b50afa8d32f031516cd7b0d2e0e6"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|||||||
@@ -5,3 +5,7 @@
|
|||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/russross/blackfriday"
|
name = "github.com/russross/blackfriday"
|
||||||
version = "2.0.0"
|
version = "2.0.0"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/mattn/go-sqlite3"
|
||||||
|
version = "1.2.0"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
{{define "Note"}}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@@ -19,3 +20,4 @@
|
|||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
{{end}}
|
||||||
|
|||||||
@@ -5,6 +5,11 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
|
||||||
"github.com/labstack/echo"
|
"github.com/labstack/echo"
|
||||||
"github.com/russross/blackfriday"
|
"github.com/russross/blackfriday"
|
||||||
@@ -18,23 +23,56 @@ func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Con
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
e := echo.New()
|
e := echo.New()
|
||||||
|
db, err := sql.Open("sqlite3", "./database.sqlite")
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
e.Renderer = &Template{templates: template.Must(template.ParseGlob("assets/templates/*.html"))}
|
e.Renderer = &Template{templates: template.Must(template.ParseGlob("assets/templates/*.html"))}
|
||||||
|
|
||||||
e.Static("/", "assets/public")
|
e.Static("/", "assets/public")
|
||||||
e.GET("/TOS.md", func(c echo.Context) error { return c.Render(http.StatusOK, "Page", md2html(c, "TOS")) })
|
e.GET("/TOS.md", func(c echo.Context) error { return c.Render(http.StatusOK, "Page", md2html(c, "TOS")) })
|
||||||
|
e.GET("/:id", func(c echo.Context) error { return c.Render(http.StatusOK, "Note", note(c, db)) })
|
||||||
|
|
||||||
e.Logger.Fatal(e.Start(":3000"))
|
e.Logger.Fatal(e.Start(":3000"))
|
||||||
}
|
}
|
||||||
|
|
||||||
type Note struct {
|
type Note struct {
|
||||||
ID, Title string
|
ID, Title, Text string
|
||||||
|
Published, Edited time.Time
|
||||||
|
Views int
|
||||||
Content template.HTML
|
Content template.HTML
|
||||||
}
|
}
|
||||||
|
|
||||||
func md2html(c echo.Context, name string) *Note {
|
func note(c echo.Context, db *sql.DB) Note {
|
||||||
|
stmt, err := db.Prepare("select id, text, strftime('%s', published) as published, strftime('%s',edited) as edited, password, views from notes where id = ?")
|
||||||
|
if err != nil {
|
||||||
|
c.Logger().Error(err)
|
||||||
|
return Note{}
|
||||||
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
row := stmt.QueryRow(c.Param("id"))
|
||||||
|
var id, text, password, published, edited string
|
||||||
|
var views int
|
||||||
|
if err := row.Scan(&id, &text, &published, &edited, &password, &views); err != nil {
|
||||||
|
c.Logger().Error(err)
|
||||||
|
return Note{} // TODO: use predefined error notes
|
||||||
|
}
|
||||||
|
// cand := regexp.MustCompile("[\n\r]").Split(text, 1)
|
||||||
|
// fmt.Println("CANDIDATE", cand[0])
|
||||||
|
return Note{
|
||||||
|
ID: id,
|
||||||
|
Content: template.HTML(string(blackfriday.Run([]byte(text)))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func md2html(c echo.Context, name string) Note {
|
||||||
path := "assets/markdown/" + name + ".md"
|
path := "assets/markdown/" + name + ".md"
|
||||||
mdContent, err := ioutil.ReadFile(path)
|
mdContent, err := ioutil.ReadFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Logger().Errorf("couldn't open markdown page %q: %v", path, err)
|
c.Logger().Errorf("couldn't open markdown page %q: %v", path, err)
|
||||||
return nil
|
return Note{}
|
||||||
}
|
}
|
||||||
return &Note{Content: template.HTML(string(blackfriday.Run(mdContent)))}
|
return Note{Title: name, Content: template.HTML(string(blackfriday.Run(mdContent)))}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user