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:
parent
2513171132
commit
38194cfa24
8 changed files with 110 additions and 154 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -558,7 +558,7 @@ func tempCleaner() {
|
|||
continue
|
||||
}
|
||||
var board Board
|
||||
err := board.PopulateData(post.BoardID, "")
|
||||
err := board.PopulateData(post.BoardID)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
110
src/sql.go
110
src/sql.go
|
@ -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{}{§ionCount},
|
||||
); 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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
69
src/types.go
69
src/types.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue