Begin adding a basic config
This commit is contained in:
parent
7ddaacc415
commit
2565a6f397
6 changed files with 89 additions and 8 deletions
|
@ -2,13 +2,12 @@
|
||||||
|
|
||||||
Simple plaintext diary.
|
Simple plaintext diary.
|
||||||
|
|
||||||
This project is *very* highly opinionated and minimal.
|
This project is *very* opinionated and minimal. It is designed primarily for myself.
|
||||||
|
|
||||||
## Features:
|
## Features:
|
||||||
* Each day, you get a txt file. You have until 23:59 of that very day to finalise it.
|
* Each day, you get a txt file. You have until 23:59 of that very day to finalise it.
|
||||||
* At any moment, you can log a single line to the log file
|
* At any moment, you can log a single line to the log
|
||||||
* You can save named notes to document milestones, big events, or just a nice game you played this month
|
* You can save named notes to document milestones, big events, or just a nice game you played this month
|
||||||
* You can export everything in a zip file. Emergency export code for other people will be supported
|
* You can easily export everything in a zip file for backups
|
||||||
|
|
||||||
* No extra features. No encryption, OAuth, or anything fancy. Even the password is plain te- wait is this a feature?
|
* Everything is in plain text. No databases, encryption, OAuth, or anything fancy. Even the password is plain te- wait is this a feature?
|
||||||
* Intention to eventually *Go* dependency-less (get it?). Sorry chi, I still like you!
|
|
15
TODO.md
Normal file
15
TODO.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Crucial
|
||||||
|
* Load username&password, port from config.txt
|
||||||
|
* Add export feature
|
||||||
|
* Add missing frontend pages
|
||||||
|
|
||||||
|
# Short term
|
||||||
|
* Custom CSS, pico is too big for this project
|
||||||
|
* Organise .go files better
|
||||||
|
|
||||||
|
# Long-medium term
|
||||||
|
* *Go* dependency-less
|
||||||
|
* Improve logging, log to files
|
||||||
|
* Make the CLI better
|
63
config.go
Normal file
63
config.go
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Username string
|
||||||
|
Password string
|
||||||
|
Port int
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateConfig(config Config) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadConfig() (Config, error) {
|
||||||
|
filename := "config/config.txt"
|
||||||
|
|
||||||
|
if _, err := os.Stat(filename); errors.Is(err, os.ErrNotExist) {
|
||||||
|
CreateConfig(Config{})
|
||||||
|
return Config{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg := Config{Port: 7101}
|
||||||
|
|
||||||
|
file, err := os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
for scanner.Scan() {
|
||||||
|
entry := strings.Split(strings.Replace(scanner.Text(), " ", "", -1), "=")
|
||||||
|
if len(entry) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
key := entry[0]
|
||||||
|
value := entry[1]
|
||||||
|
if key == "username" {
|
||||||
|
cfg.Username = value
|
||||||
|
} else if key == "password" {
|
||||||
|
cfg.Password = value
|
||||||
|
} else if key == "port" {
|
||||||
|
numVal, err := strconv.Atoi(value)
|
||||||
|
if err == nil {
|
||||||
|
cfg.Port = numVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := scanner.Err(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg, nil
|
||||||
|
}
|
4
files.go
4
files.go
|
@ -11,6 +11,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GetFile returns raw contents of a txt file in data directory
|
||||||
func GetFile(filename string, w http.ResponseWriter, r *http.Request) {
|
func GetFile(filename string, w http.ResponseWriter, r *http.Request) {
|
||||||
path := "data/" + filename + ".txt" // Can we and should we sanitize this?
|
path := "data/" + filename + ".txt" // Can we and should we sanitize this?
|
||||||
|
|
||||||
|
@ -31,7 +32,8 @@ func GetFile(filename string, w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PostFile TODO: Save to trash to prevent malicious/accidental ovverrides?
|
// PostFile Writes request's contents to a txt file in data directory
|
||||||
|
// TODO: Save to trash to prevent malicious/accidental overrides?
|
||||||
func PostFile(filename string, w http.ResponseWriter, r *http.Request) {
|
func PostFile(filename string, w http.ResponseWriter, r *http.Request) {
|
||||||
body, err := io.ReadAll(r.Body)
|
body, err := io.ReadAll(r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
2
main.go
2
main.go
|
@ -1,5 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
var Cfg, _ = LoadConfig()
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
Serve()
|
Serve()
|
||||||
}
|
}
|
||||||
|
|
4
serve.go
4
serve.go
|
@ -44,6 +44,6 @@ func Serve() {
|
||||||
fs := http.FileServer(http.Dir("public"))
|
fs := http.FileServer(http.Dir("public"))
|
||||||
r.Handle("/public/*", http.StripPrefix("/public/", fs))
|
r.Handle("/public/*", http.StripPrefix("/public/", fs))
|
||||||
|
|
||||||
fmt.Println("Website working on port: ", PORT)
|
fmt.Println("Website working on port: ", Cfg.Port)
|
||||||
_ = http.ListenAndServe(":"+strconv.Itoa(PORT), r)
|
_ = http.ListenAndServe(":"+strconv.Itoa(Cfg.Port), r)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue