1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-20 09:26:23 -07:00

Finish refactoring types

This commit is contained in:
comraderat 2020-04-20 17:42:48 +02:00
parent 2513171132
commit 38194cfa24
8 changed files with 110 additions and 154 deletions

View file

@ -331,7 +331,7 @@ func buildBoards(which ...int) (html string) {
} else {
for b, id := range which {
boards = append(boards, Board{})
if err = boards[b].PopulateData(id, ""); err != nil {
if err = boards[b].PopulateData(id); err != nil {
return gclog.Printf(lErrorLog, "Error getting board information (ID: %d)", id)
}
}
@ -398,7 +398,7 @@ func buildCatalog(which int) string {
}
var board Board
if err = board.PopulateData(which, ""); err != nil {
if err = board.PopulateData(which); err != nil {
return gclog.Printf(lErrorLog, "Error getting board information (ID: %d)", which)
}
@ -442,7 +442,7 @@ func buildThreadPages(op *Post) error {
var replies []Post
var threadPageFile *os.File
var board Board
if err = board.PopulateData(op.BoardID, ""); err != nil {
if err = board.PopulateData(op.BoardID); err != nil {
return err
}

View file

@ -676,7 +676,7 @@ var manageFunctions = map[string]ManageFunction{
break
}
if err := CreateBoard(*board); err != nil {
if err := CreateBoard(board); err != nil {
do = ""
boardCreationStatus = gclog.Print(lErrorLog, "Error creating board: ", err.Error())
break

View file

@ -558,7 +558,7 @@ func tempCleaner() {
continue
}
var board Board
err := board.PopulateData(post.BoardID, "")
err := board.PopulateData(post.BoardID)
if err != nil {
continue
}

View file

@ -286,7 +286,7 @@ func utilHandler(writer http.ResponseWriter, request *http.Request) {
}
var board Board
if err = board.PopulateData(boardid, ""); err != nil {
if err = board.PopulateData(boardid); err != nil {
serveErrorPage(writer, gclog.Print(lErrorLog,
"Invalid form data: ", err.Error()))
return

View file

@ -64,95 +64,45 @@ func connectToSQLServer() {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
var truncateStr string
switch config.DBtype {
case "mysql":
fallthrough
case "postgres":
truncateStr = "TRUNCATE TABLE DBPREFIXsessions"
case "sqlite3":
truncateStr = "DELETE FROM DBPREFIXsessions"
}
//Not needed anymore
// var truncateStr string
// switch config.DBtype {
// case "mysql":
// fallthrough
// case "postgres":
// truncateStr = "TRUNCATE TABLE DBPREFIXsessions"
// case "sqlite3":
// truncateStr = "DELETE FROM DBPREFIXsessions"
// }
if _, err = execSQL(truncateStr); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
// if _, err = execSQL(truncateStr); err != nil {
// gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
// }
// Create generic "Main" section if one doesn't already exist
var sectionCount int
if err = queryRowSQL(
"SELECT COUNT(*) FROM DBPREFIXsections",
[]interface{}{}, []interface{}{&sectionCount},
); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
if sectionCount == 0 {
if _, err = execSQL(
"INSERT INTO DBPREFIXsections (name,abbreviation) VALUES('Main','main')",
); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
}
var sqlVersionStr string
isNewInstall := false
if err = queryRowSQL("SELECT value FROM DBPREFIXinfo WHERE name = 'version'",
[]interface{}{}, []interface{}{&sqlVersionStr},
); err == sql.ErrNoRows {
isNewInstall = true
} else if err != nil {
if err = CreateDefaultSectionIfNotExist(); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
var numBoards, numStaff int
rows, err := querySQL("SELECT COUNT(*) FROM DBPREFIXboards UNION ALL SELECT COUNT(*) FROM DBPREFIXstaff")
//TODO fix new install thing once it works with existing database
// var sqlVersionStr string
// isNewInstall := false
// if err = queryRowSQL("SELECT value FROM DBPREFIXinfo WHERE name = 'version'",
// []interface{}{}, []interface{}{&sqlVersionStr},
// ); err == sql.ErrNoRows {
// isNewInstall = true
// } else if err != nil {
// gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
// }
err = CreateDefaultBoardIfNoneExist()
if err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed checking board list: ", err.Error())
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed creating default board: ", err.Error())
}
rows.Next()
rows.Scan(&numBoards)
rows.Next()
rows.Scan(&numStaff)
if numBoards == 0 && numStaff == 0 {
gclog.Println(lErrorLog|lStdLog,
"This looks like a new installation. Creating /test/ and a new staff member.\nUsername: admin\nPassword: password")
if _, err = execSQL(
"INSERT INTO DBPREFIXstaff (username,password_checksum,rank) VALUES(?,?,?)",
"admin", bcryptSum("password"), 3,
); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed creating admin user with error: ", err.Error())
}
firstBoard := Board{
Dir: "test",
Title: "Testing board",
Subtitle: "Board for testing",
Description: "Board for testing",
Section: 1}
firstBoard.SetDefaults()
firstBoard.Build(true, true)
if !isNewInstall {
return
}
if _, err = execSQL(
"INSERT INTO DBPREFIXinfo (name,value) VALUES('version',?)", versionStr,
); err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed creating first board: ", err.Error())
}
return
} else if err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
if err != nil && !strings.Contains(err.Error(), "Duplicate entry") {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed initializing DB: ", err.Error())
}
if version.CompareString(sqlVersionStr) > 0 {
gclog.Printf(lErrorLog|lStdLog, "Updating version in database from %s to %s", sqlVersionStr, version.String())
execSQL("UPDATE DBPREFIXinfo SET value = ? WHERE name = 'version'", versionStr)
err = CreateDefaultAdminIfNoStaff()
if err != nil {
gclog.Print(lErrorLog|lStdLog|lFatal, "Failed creating default admin account: ", err.Error())
}
//fix versioning thing
}
func initDB(initFile string) error {

View file

@ -312,7 +312,8 @@ func GetAllAccouncements() ([]Announcement, error) {
return nil, ErrNotImplemented
}
func CreateBoard(values Board) error {
//CreateBoard creates this board in the database if it doesnt exist already, also sets ID to correct value
func CreateBoard(values *Board) error {
/*
"INSERT INTO DBPREFIXboards (list_order,dir,type,upload_type,title,subtitle,"+
"description,section,max_file_size,max_pages,default_style,locked,created_on,"+
@ -327,6 +328,8 @@ func CreateBoard(values Board) error {
board.NoImagesAfter, board.MaxMessageLength, board.EmbedsAllowed,
board.RedirectToThread, board.RequireFile, board.EnableCatalog,*/
return ErrNotImplemented
//set id to created id
//errors.New("board already exists in database")
}
func GetBoardUris() (URIS []string, err error) {
@ -361,6 +364,10 @@ func GetAllSectionsOrCreateDefault() (sections []BoardSection, err error) {
return nil, ErrNotImplemented
}
func CreateDefaultSectionIfNotExist() error {
return ErrNotImplemented
}
func GetAllStaffNopass() ([]Staff, error) {
return nil, ErrNotImplemented
@ -527,3 +534,65 @@ func DeletePost(postID int) error {
//Also delete child posts if its a top post
return ErrNotImplemented
}
func CreateDefaultBoardIfNoneExist() error {
return ErrNotImplemented
// firstBoard := Board{
// Dir: "test",
// Title: "Testing board",
// Subtitle: "Board for testing",
// Description: "Board for testing",
// Section: 1}
// firstBoard.SetDefaults()
// firstBoard.Build(true, true)
}
func CreateDefaultAdminIfNoStaff() error {
return ErrNotImplemented
// if _, err = execSQL(
// "INSERT INTO DBPREFIXstaff (username,password_checksum,rank) VALUES(?,?,?)",
// "admin", bcryptSum("password"), 3,
// ); err != nil {
// gclog.Print(lErrorLog|lStdLog|lFatal, "Failed creating admin user with error: ", err.Error())
// }
}
func (board *Board) UpdateID() error {
return ErrNotImplemented
// return queryRowSQL("SELECT id FROM DBPREFIXboards WHERE dir = ?",
// []interface{}{board.Dir},
// []interface{}{&board.ID})
}
// PopulateData gets the board data from the database and sets the respective properties.
func (board *Board) PopulateData(id int) error {
// queryStr := "SELECT * FROM DBPREFIXboards WHERE id = ?"
// var values []interface{}
// values = append(values, id)
// return queryRowSQL(queryStr, values, []interface{}{
// &board.ID, &board.ListOrder, &board.Dir, &board.Type, &board.UploadType,
// &board.Title, &board.Subtitle, &board.Description, &board.Section,
// &board.MaxFilesize, &board.MaxPages, &board.DefaultStyle, &board.Locked,
// &board.CreatedOn, &board.Anonymous, &board.ForcedAnon, &board.MaxAge,
// &board.AutosageAfter, &board.NoImagesAfter, &board.MaxMessageLength,
// &board.EmbedsAllowed, &board.RedirectToThread, &board.RequireFile,
// &board.EnableCatalog})
return ErrNotImplemented
}
func DoesBoardExist(dir string) (bool, error) {
return false, ErrNotImplemented
}
func (a *BanAppeal) GetBan() (*BanInfo, error) {
// var ban BanInfo
// err := queryRowSQL("SELECT * FROM DBPREFIXbanlist WHERE id = ? LIMIT 1",
// []interface{}{a.ID}, []interface{}{
// &ban.ID, &ban.AllowRead, &ban.IP, &ban.Name, &ban.NameIsRegex, &ban.SilentBan,
// &ban.Boards, &ban.Staff, &ban.Timestamp, &ban.Expires, &ban.Permaban, &ban.Reason,
// &ban.StaffNote, &ban.AppealAt},
// )
// return &ban, err
return nil, ErrNotImplemented
}

View file

@ -211,7 +211,7 @@ var funcMap = template.FuncMap{
"numReplies": numReplies,
"getBoardDir": func(id int) string {
var board Board
if err := board.PopulateData(id, ""); err != nil {
if err := board.PopulateData(id); err != nil {
return ""
}
return board.Dir

View file

@ -1,7 +1,6 @@
package main
import (
"database/sql"
"encoding/json"
"errors"
"fmt"
@ -116,17 +115,6 @@ type BanAppeal struct {
StaffResponse string
}
func (a *BanAppeal) GetBan() (*BanInfo, error) {
var ban BanInfo
err := queryRowSQL("SELECT * FROM DBPREFIXbanlist WHERE id = ? LIMIT 1",
[]interface{}{a.ID}, []interface{}{
&ban.ID, &ban.AllowRead, &ban.IP, &ban.Name, &ban.NameIsRegex, &ban.SilentBan,
&ban.Boards, &ban.Staff, &ban.Timestamp, &ban.Expires, &ban.Permaban, &ban.Reason,
&ban.StaffNote, &ban.AppealAt},
)
return &ban, err
}
type BanInfo struct {
ID uint
AllowRead bool
@ -306,34 +294,11 @@ func (board *Board) Build(newBoard bool, force bool) error {
}
if newBoard {
var numRows int
queryRowSQL("SELECT COUNT(*) FROM DBPREFIXboards WHERE `dir` = ?",
[]interface{}{board.Dir},
[]interface{}{&numRows},
)
if numRows > 0 {
return errors.New("board already exists in database")
}
board.CreatedOn = time.Now()
var result sql.Result
if result, err = execSQL("INSERT INTO DBPREFIXboards "+
"(list_order,dir,type,upload_type,title,subtitle,description,"+
"section,max_file_size,max_pages,default_style,locked,created_on,"+
"anonymous,forced_anon,max_age,autosage_after,no_images_after,max_message_length,"+
"embeds_allowed,redirect_to_thread,require_file,enable_catalog) "+
"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
board.ListOrder, board.Dir, board.Type, board.UploadType,
board.Title, board.Subtitle, board.Description, board.Section,
board.MaxFilesize, board.MaxPages, board.DefaultStyle,
board.Locked, getSpecificSQLDateTime(board.CreatedOn), board.Anonymous,
board.ForcedAnon, board.MaxAge, board.AutosageAfter,
board.NoImagesAfter, board.MaxMessageLength, board.EmbedsAllowed,
board.RedirectToThread, board.RequireFile, board.EnableCatalog,
); err != nil {
err := CreateBoard(board)
if err != nil {
return err
}
boardID, _ := result.LastInsertId()
board.ID = int(boardID)
} else {
if err = board.UpdateID(); err != nil {
return err
@ -350,28 +315,6 @@ func (board *Board) Build(newBoard bool, force bool) error {
return nil
}
// PopulateData gets the board data from the database and sets the respective properties.
// if id > -1, the ID will be used to search the database. Otherwise dir will be used
func (board *Board) PopulateData(id int, dir string) error {
queryStr := "SELECT * FROM DBPREFIXboards WHERE id = ?"
var values []interface{}
if id > -1 {
values = append(values, id)
} else {
queryStr = "SELECT * FROM DBPREFIXboards WHERE dir = ?"
values = append(values, dir)
}
return queryRowSQL(queryStr, values, []interface{}{
&board.ID, &board.ListOrder, &board.Dir, &board.Type, &board.UploadType,
&board.Title, &board.Subtitle, &board.Description, &board.Section,
&board.MaxFilesize, &board.MaxPages, &board.DefaultStyle, &board.Locked,
&board.CreatedOn, &board.Anonymous, &board.ForcedAnon, &board.MaxAge,
&board.AutosageAfter, &board.NoImagesAfter, &board.MaxMessageLength,
&board.EmbedsAllowed, &board.RedirectToThread, &board.RequireFile,
&board.EnableCatalog})
}
func (board *Board) SetDefaults() {
board.ListOrder = 0
board.Section = 1
@ -396,12 +339,6 @@ func (board *Board) SetDefaults() {
board.ThreadsPerPage = 10
}
func (board *Board) UpdateID() error {
return queryRowSQL("SELECT id FROM DBPREFIXboards WHERE dir = ?",
[]interface{}{board.Dir},
[]interface{}{&board.ID})
}
type BoardSection struct {
ID int
ListOrder int
@ -449,7 +386,7 @@ func (p *Post) GetURL(includeDomain bool) string {
postURL += config.SiteDomain
}
var board Board
if err := board.PopulateData(p.BoardID, ""); err != nil {
if err := board.PopulateData(p.BoardID); err != nil {
return postURL
}