mirror of
https://github.com/gmemstr/pogo.git
synced 2024-09-19 17:21:10 +01:00
Generate default config.json and split code into functions
Should help with readability, and makes the binary effectively completely self suffecient and portable 👍
This commit is contained in:
parent
8fcbd02fc4
commit
b0e7a69771
142
setup.go
142
setup.go
|
@ -6,10 +6,12 @@ import (
|
|||
"crypto/rand"
|
||||
"database/sql"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -17,62 +19,37 @@ import (
|
|||
"github.com/google/go-github/github"
|
||||
)
|
||||
|
||||
func GenerateRandomBytes(n int) ([]byte, error) {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// GenerateRandomString returns a URL-safe, base64 encoded
|
||||
// securely generated random string.
|
||||
func GenerateRandomString(s int) (string, error) {
|
||||
b, err := GenerateRandomBytes(s)
|
||||
return base64.URLEncoding.EncodeToString(b), err
|
||||
type Configuration struct {
|
||||
Name string `json:"Name"`
|
||||
Host string `json:"Host"`
|
||||
Email string `json:"Email"`
|
||||
Description string `json:"Description"`
|
||||
Image string `json:"Image"`
|
||||
PodcastUrl string `json:"PodcastUrl"`
|
||||
}
|
||||
|
||||
func Setup() {
|
||||
go GenerateRss()
|
||||
defer LockFile()
|
||||
// Create users SQLite3 file
|
||||
fmt.Println("Initializing the database")
|
||||
|
||||
// Create directories
|
||||
os.MkdirAll("assets/config/", 0755)
|
||||
os.Mkdir("podcasts", 0755)
|
||||
os.Create("assets/config/users.db")
|
||||
|
||||
db, err := sql.Open("sqlite3", "assets/config/users.db")
|
||||
if err != nil {
|
||||
fmt.Println("Problem opening database file! %v", err)
|
||||
}
|
||||
// Write basic configuration file
|
||||
WriteSkeletonConfig()
|
||||
|
||||
_, err = db.Exec("CREATE TABLE IF NOT EXISTS `users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `username` TEXT UNIQUE, `hash` TEXT, `realname` TEXT, `email` TEXT, `permissions` INTEGER )")
|
||||
if err != nil {
|
||||
fmt.Println("Problem creating database! %v", err)
|
||||
}
|
||||
// Generate neccesary feed files
|
||||
go GenerateRss()
|
||||
|
||||
text, err := GenerateRandomString(12)
|
||||
if err != nil {
|
||||
fmt.Println("Error randomly generating password", err)
|
||||
}
|
||||
fmt.Println("Admin password: ", text)
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(text), 4)
|
||||
if err != nil {
|
||||
fmt.Println("Error generating hash", err)
|
||||
}
|
||||
if bcrypt.CompareHashAndPassword(hash, []byte(text)) == nil {
|
||||
fmt.Println("Password hashed")
|
||||
}
|
||||
_, err = db.Exec("INSERT INTO users(id,username,hash,realname,email,permissions) VALUES (0,'admin','" + string(hash) + "','Administrator','admin@localhost',2)")
|
||||
if err != nil {
|
||||
fmt.Println("Problem creating database! %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
// Create "first run" lockfile when function exits
|
||||
defer LockFile()
|
||||
|
||||
// Create users SQLite3 file
|
||||
CreateDatabase()
|
||||
|
||||
// Download web assets
|
||||
GetWebAssets()
|
||||
}
|
||||
|
||||
func GetWebAssets() {
|
||||
fmt.Println("Downloading web assets")
|
||||
os.MkdirAll("assets/web/", 0755)
|
||||
|
||||
|
@ -115,6 +92,39 @@ func Setup() {
|
|||
}
|
||||
}
|
||||
|
||||
func CreateDatabase() {
|
||||
fmt.Println("Initializing the database")
|
||||
os.Create("assets/config/users.db")
|
||||
|
||||
db, err := sql.Open("sqlite3", "assets/config/users.db")
|
||||
if err != nil {
|
||||
fmt.Println("Problem opening database file! %v", err)
|
||||
}
|
||||
|
||||
_, err = db.Exec("CREATE TABLE IF NOT EXISTS `users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `username` TEXT UNIQUE, `hash` TEXT, `realname` TEXT, `email` TEXT, `permissions` INTEGER )")
|
||||
if err != nil {
|
||||
fmt.Println("Problem creating database! %v", err)
|
||||
}
|
||||
|
||||
text, err := GenerateRandomString(12)
|
||||
if err != nil {
|
||||
fmt.Println("Error randomly generating password", err)
|
||||
}
|
||||
fmt.Println("Admin password: ", text)
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(text), 4)
|
||||
if err != nil {
|
||||
fmt.Println("Error generating hash", err)
|
||||
}
|
||||
if bcrypt.CompareHashAndPassword(hash, []byte(text)) == nil {
|
||||
fmt.Println("Password hashed")
|
||||
}
|
||||
_, err = db.Exec("INSERT INTO users(id,username,hash,realname,email,permissions) VALUES (0,'admin','" + string(hash) + "','Administrator','admin@localhost',2)")
|
||||
if err != nil {
|
||||
fmt.Println("Problem creating database! %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
}
|
||||
|
||||
func LockFile() {
|
||||
lock, err := os.Create(".lock")
|
||||
if err != nil {
|
||||
|
@ -124,6 +134,46 @@ func LockFile() {
|
|||
defer lock.Close()
|
||||
}
|
||||
|
||||
func WriteSkeletonConfig() {
|
||||
fmt.Println("Writing basic config file to disk")
|
||||
|
||||
os.Create("assets/config/config.json")
|
||||
|
||||
config := Configuration{
|
||||
"Pogo Podcast",
|
||||
"John Doe",
|
||||
"johndoe@localhost",
|
||||
"A Podcast About Stuff",
|
||||
"localhost:3000/assets/logo-large.png",
|
||||
"http://localhost:3000",
|
||||
}
|
||||
c, err := json.Marshal(config)
|
||||
|
||||
filename := "config.json"
|
||||
|
||||
err = ioutil.WriteFile("./assets/config/"+filename, c, 0644)
|
||||
if err != nil {
|
||||
fmt.Println("Error: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
func GenerateRandomBytes(n int) ([]byte, error) {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// GenerateRandomString returns a URL-safe, base64 encoded
|
||||
// securely generated random string.
|
||||
func GenerateRandomString(s int) (string, error) {
|
||||
b, err := GenerateRandomBytes(s)
|
||||
return base64.URLEncoding.EncodeToString(b), err
|
||||
}
|
||||
|
||||
// From https://stackoverflow.com/questions/20357223/easy-way-to-unzip-file-with-golang
|
||||
func Unzip(src, dest string) error {
|
||||
r, err := zip.OpenReader(src)
|
||||
|
|
Loading…
Reference in a new issue