You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

932 lines
20 KiB

package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func openDB() *sql.DB {
LogMsg("Opening database")
data, err := sql.Open("mysql", fmt.Sprintf("%+v:%+v@%+v",
config.DBUsername, config.DBPassword, config.DatabaseInfo))
if err != nil {
LogMsg("%+v:", err)
}
return data
}
func (u *User) Insert() {
db := openDB()
defer db.Close()
LogMsg("Inserting %+v", u)
insert, err := db.Query(fmt.Sprintf("INSERT INTO users VALUES ('%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v')",
u.Identifier, u.Upload, u.Username, u.Email, u.Bio, u.Location, u.Twitter, u.Github, u.Keybase, u.Discord, u.LinkedIn, u.Website, u.Reddit, u.ProfilePic))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Insert complete. Closing!")
insert.Close()
}
func (g *GlassApp) Insert() {
db := openDB()
defer db.Close()
LogMsg("Inserting %+v", g)
insert, err := db.Query(fmt.Sprintf("INSERT INTO glassapps VALUES ('%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v')",
g.AppName, g.ShortDesc, g.LongDesc, g.APKLink, g.AppID, g.Screenshots, g.Maintainer, g.Icon))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Insert complete. Closing!")
insert.Close()
}
func (c *CompanionApp) Insert() {
db := openDB()
defer db.Close()
LogMsg("Inserting %+v", c)
insert, err := db.Query(fmt.Sprintf("INSERT INTO companionapps VALUES ('%+v','%+v','%+v','%+v','%+v')",
c.AppName, c.APKLink, c.GlassAppID, c.AppID, c.Icon))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Insert complete. Closing!")
insert.Close()
}
func (d *DownloadStats) Insert() {
db := openDB()
defer db.Close()
LogMsg("Inserting %+v", d)
insert, err := db.Query(fmt.Sprintf("INSERT INTO companionapps VALUES ('%+v','%+v','%+v','%+v')",
d.Identifier, d.Rating, d.Review, d.GlassAppID))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Insert complete. Closing!")
insert.Close()
}
func (a *AuthToken) Insert() {
db := openDB()
defer db.Close()
LogMsg("Inserting %+v", a)
insert, err := db.Query(fmt.Sprintf("INSERT INTO authtoken VALUES ('%+v','%+v','%+v','%+v','%+v','%+v','%+v','%+v')",
a.Identifier, a.Email, a.Username, a.PasswordHash, a.LastIP, a.AuthToken, a.PreviousHash, a.Current))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Insert complete. Closing!")
insert.Close()
}
func (u *User) Retrieve() error {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM users WHERE"
first := true
if u.Identifier != "" {
parms = append(parms, u.Identifier)
statement += " Identifier = ? "
first = false
}
if u.Upload != "" {
parms = append(parms, u.Upload)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Upload = ? "
}
if u.Username != "" {
parms = append(parms, u.Username)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Username = ? "
}
if u.Email != "" {
parms = append(parms, u.Email)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Email = ? "
}
if u.Bio != "" {
parms = append(parms, u.Bio)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Bio = ? "
}
if u.Location != "" {
parms = append(parms, u.Location)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Location = ? "
}
if u.Twitter != "" {
parms = append(parms, u.Twitter)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Twitter = ? "
}
if u.Github != "" {
parms = append(parms, u.Github)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Github = ? "
}
if u.Keybase != "" {
parms = append(parms, u.Keybase)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Keybase = ? "
}
if u.Discord != "" {
parms = append(parms, u.Discord)
statement += " Discord = ? "
first = false
}
if u.LinkedIn != "" {
parms = append(parms, u.LinkedIn)
if !first {
statement += " AND "
} else {
first = false
}
statement += " LinkedIn = ? "
}
if u.Website != "" {
parms = append(parms, u.Website)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Website = ? "
}
if u.Reddit != "" {
parms = append(parms, u.Reddit)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Reddit = ? "
}
if u.ProfilePic != "" {
parms = append(parms, u.ProfilePic)
if !first {
statement += " AND "
} else {
first = false
}
statement += " ProfilePic = ? "
}
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return err
}
for rows.Next() {
rows.Scan(&u.Identifier, &u.Upload, &u.Username, &u.Email, &u.Bio, &u.Location,
&u.Twitter, &u.Github, &u.Keybase, &u.Discord, &u.LinkedIn, &u.Website,
&u.Reddit, &u.ProfilePic)
}
LogMsg("DB Returned: %+v", u)
return nil
}
func (g *GlassApp) Retrieve() error {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM glassapps WHERE"
first := true
if g.AppName != "" {
parms = append(parms, g.AppName)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppName = ? "
}
if g.ShortDesc != "" {
parms = append(parms, g.ShortDesc)
if !first {
statement += " AND "
} else {
first = false
}
statement += " ShortDesc = ? "
}
if g.LongDesc != "" {
parms = append(parms, g.LongDesc)
if !first {
statement += " AND "
} else {
first = false
}
statement += " LongDesc = ? "
}
if g.APKLink != "" {
parms = append(parms, g.APKLink)
if !first {
statement += " AND "
} else {
first = false
}
statement += " APKLink = ? "
}
if g.AppID != "" {
parms = append(parms, g.AppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppID = ? "
}
if g.Screenshots != "" {
parms = append(parms, g.Screenshots)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Screenshots = ? "
}
if g.Maintainer != "" {
parms = append(parms, g.Maintainer)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Maintainer = ? "
}
if g.Icon != "" {
parms = append(parms, g.Icon)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Icon = ? "
}
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return err
}
for rows.Next() {
rows.Scan(&g.AppName, &g.ShortDesc, &g.LongDesc, &g.APKLink, &g.AppID, &g.Screenshots, &g.Maintainer, &g.Icon)
}
LogMsg("DB Returned: %+v", g)
return nil
}
func (g *GlassApp) RetrievePage(pageSize int32, page int32) ([]GlassApp, error) {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM glassapps WHERE"
first := true
if g.AppName != "" {
parms = append(parms, g.AppName)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppName = ? "
}
if g.ShortDesc != "" {
parms = append(parms, g.ShortDesc)
if !first {
statement += " AND "
} else {
first = false
}
statement += " ShortDesc = ? "
}
if g.LongDesc != "" {
parms = append(parms, g.LongDesc)
if !first {
statement += " AND "
} else {
first = false
}
statement += " LongDesc = ? "
}
if g.APKLink != "" {
parms = append(parms, g.APKLink)
if !first {
statement += " AND "
} else {
first = false
}
statement += " APKLink = ? "
}
if g.AppID != "" {
parms = append(parms, g.AppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppID = ? "
}
if g.Screenshots != "" {
parms = append(parms, g.Screenshots)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Screenshots = ? "
}
if g.Maintainer != "" {
parms = append(parms, g.Maintainer)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Maintainer = ? "
}
if g.Icon != "" {
parms = append(parms, g.Icon)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Icon = ? "
}
statement += fmt.Sprintf(" LIMIT %+v OFFSET %+v", pageSize, pageSize * page)
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return nil, err
}
var ret []GlassApp
for rows.Next() {
var g2 GlassApp
rows.Scan(&g2.AppName, &g2.ShortDesc, &g2.LongDesc, &g2.APKLink, &g2.AppID, &g2.Screenshots, &g2.Maintainer, &g2.Icon)
ret = append(ret, g2)
}
LogMsg("DB Returned: %+v", g)
return ret, nil
}
func (c *CompanionApp) Retrieve() error {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM companionapp WHERE"
first := true
if c.AppName != "" {
parms = append(parms, c.AppName)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppName = ? "
}
if c.APKLink != "" {
parms = append(parms, c.APKLink)
if !first {
statement += " AND "
} else {
first = false
}
statement += " APKLink = ? "
}
if c.GlassAppID != "" {
parms = append(parms, c.GlassAppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " GlassAppID = ? "
}
if c.AppID != "" {
parms = append(parms, c.AppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppID = ? "
}
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return err
}
for rows.Next() {
rows.Scan(&c.AppName, &c.APKLink, &c.GlassAppID, &c.AppID)
}
LogMsg("DB Returned: %+v", c)
return nil
}
func (c *CompanionApp) RetrievePage(pageSize int32, page int32) ([]CompanionApp, error) {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM companionapp WHERE"
first := true
if c.AppName != "" {
parms = append(parms, c.AppName)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppName = ? "
}
if c.APKLink != "" {
parms = append(parms, c.APKLink)
if !first {
statement += " AND "
} else {
first = false
}
statement += " APKLink = ? "
}
if c.GlassAppID != "" {
parms = append(parms, c.GlassAppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " GlassAppID = ? "
}
if c.AppID != "" {
parms = append(parms, c.AppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AppID = ? "
}
statement += fmt.Sprintf(" LIMIT %+v OFFSET %+v", pageSize, pageSize * page)
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return nil, err
}
var ret []CompanionApp
for rows.Next() {
var c2 CompanionApp
rows.Scan(&c2.AppName, &c2.APKLink, &c2.GlassAppID, &c2.AppID)
ret = append(ret, c2)
}
LogMsg("DB Returned: %+v", c)
return ret, nil
}
func (d *DownloadStats) Retrieve() error {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM downloadstats WHERE"
first := true
if d.Identifier != "" {
parms = append(parms, d.Identifier)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Identifier = ? "
}
if d.Rating != "" {
parms = append(parms, d.Rating)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Rating = ? "
}
if d.Review != "" {
parms = append(parms, d.Review)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Review = ? "
}
if d.GlassAppID != "" {
parms = append(parms, d.GlassAppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " GlassAppID = ? "
}
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return err
}
for rows.Next() {
rows.Scan(&d.Identifier, &d.Rating, &d.Review, &d.GlassAppID)
}
LogMsg("DB Returned: %+v", d)
return nil
}
func (d *DownloadStats) RetrievePage(pageSize int32, page int32) ([]DownloadStats, error) {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM downloadstats WHERE"
first := true
if d.Identifier != "" {
parms = append(parms, d.Identifier)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Identifier = ? "
}
if d.Rating != "" {
parms = append(parms, d.Rating)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Rating = ? "
}
if d.Review != "" {
parms = append(parms, d.Review)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Review = ? "
}
if d.GlassAppID != "" {
parms = append(parms, d.GlassAppID)
if !first {
statement += " AND "
} else {
first = false
}
statement += " GlassAppID = ? "
}
statement += fmt.Sprintf(" LIMIT %+v OFFSET %+v", pageSize, pageSize * page)
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return nil, err
}
var ret []DownloadStats
for rows.Next() {
var d2 DownloadStats
rows.Scan(&d2.Identifier, &d2.Rating, &d2.Review, &d2.GlassAppID)
ret = append(ret, d2)
}
LogMsg("DB Returned: %+v", d)
return ret, nil
}
func (a *AuthToken) Retrieve() error {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM authtoken WHERE"
first := true
if a.Identifier != "" {
parms = append(parms, a.Identifier)
statement += " Identifier = ? "
first = false
}
if a.Email != "" {
parms = append(parms, a.Email)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Email = ? "
}
if a.Username != "" {
parms = append(parms, a.Username)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Username = ? "
}
if a.PasswordHash != "" {
parms = append(parms, a.PasswordHash)
if !first {
statement += " AND "
} else {
first = false
}
statement += " PasswordHash = ? "
}
if a.LastIP != "" {
parms = append(parms, a.LastIP)
if !first {
statement += " AND "
} else {
first = false
}
statement += " LastIP = ? "
}
if a.AuthToken != "" {
parms = append(parms, a.AuthToken)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AuthToken = ? "
}
if a.PreviousHash != "" {
parms = append(parms, a.PreviousHash)
if !first {
statement += " AND "
} else {
first = false
}
statement += " PreviousHash = ? "
}
if a.Current != "" {
parms = append(parms, a.Current)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Current = ? "
}
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return err
}
for rows.Next() {
rows.Scan(&a.Identifier, &a.Email, &a.Username, &a.PasswordHash, &a.LastIP, &a.AuthToken,
&a.PreviousHash, &a.Current)
}
LogMsg("DB Returned: %+v", a)
return nil
}
func (a *AuthToken) RetrievePage(pageSize int32, page int32) ([]AuthToken, error) {
db := openDB()
defer db.Close()
var parms []interface{}
statement := "SELECT * FROM authtoken WHERE"
first := true
if a.Identifier != "" {
parms = append(parms, a.Identifier)
statement += " Identifier = ? "
first = false
}
if a.Email != "" {
parms = append(parms, a.Email)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Email = ? "
}
if a.Username != "" {
parms = append(parms, a.Username)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Username = ? "
}
if a.PasswordHash != "" {
parms = append(parms, a.PasswordHash)
if !first {
statement += " AND "
} else {
first = false
}
statement += " PasswordHash = ? "
}
if a.LastIP != "" {
parms = append(parms, a.LastIP)
if !first {
statement += " AND "
} else {
first = false
}
statement += " LastIP = ? "
}
if a.AuthToken != "" {
parms = append(parms, a.AuthToken)
if !first {
statement += " AND "
} else {
first = false
}
statement += " AuthToken = ? "
}
if a.PreviousHash != "" {
parms = append(parms, a.PreviousHash)
if !first {
statement += " AND "
} else {
first = false
}
statement += " PreviousHash = ? "
}
if a.Current != "" {
parms = append(parms, a.Current)
if !first {
statement += " AND "
} else {
first = false
}
statement += " Current = ? "
}
statement += fmt.Sprintf(" LIMIT %+v OFFSET %+v", pageSize, pageSize * page)
LogMsg("Attempting to query using the following statement: %+v\nParams: %+v", statement, parms)
rows, err := db.Query(statement, parms...)
if err != nil {
return nil, err
}
var ret []AuthToken
for rows.Next() {
var a2 AuthToken
rows.Scan(&a2.Identifier, &a2.Email, &a2.Username, &a2.PasswordHash, &a2.LastIP, &a2.AuthToken,
&a2.PreviousHash, &a2.Current)
ret = append(ret, a2)
}
LogMsg("DB Returned: %+v", a)
return ret, nil
}
func (u *User) Delete() {
db := openDB()
defer db.Close()
LogMsg("Deleting %+v", u)
delete, err := db.Query(fmt.Sprintf("DELETE FROM users WHERE Identifier='%+v' AND Upload='%+v' AND Username='%+v' AND Email='%+v' AND Bio='%+v' AND Location='%+v' AND Twitter='%+v' AND Github='%+v' AND Keybase='%+v' AND Discord='%+v' AND LinkedIn='%+v' AND Website='%+v' AND Reddit='%+v' AND ProfilePic='%+v'",
u.Identifier, u.Upload, u.Username, u.Email, u.Bio, u.Location, u.Twitter, u.Github, u.Keybase, u.Discord, u.LinkedIn, u.Website, u.Reddit, u.ProfilePic))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Delete complete. Closing!")
delete.Close()
}
func (g *GlassApp) Delete() {
db := openDB()
defer db.Close()
LogMsg("Deleting %+v", g)
delete, err := db.Query(fmt.Sprintf("DELETE FROM glassapps WHERE AppName='%+v' AND ShortDesc='%+v' AND LongDesc='%+v' AND APKLink='%+v' AND AppID='%+v' AND Screenshots='%+v' AND Maintainer='%+v' AND Icon='%+v'",
g.AppName, g.ShortDesc, g.LongDesc, g.APKLink, g.AppID, g.Screenshots, g.Maintainer, g.Icon))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Delete complete. Closing!")
delete.Close()
}
func (c *CompanionApp) Delete() {
db := openDB()
defer db.Close()
LogMsg("Deleting %+v", c)
delete, err := db.Query(fmt.Sprintf("DELETE FROM companionapps WHERE AppName='%+v' AND APKLink='%+v' AND GlassAppID='%+v' AND AppID='%+v' AND Icon='%+v'",
c.AppName, c.APKLink, c.GlassAppID, c.AppID, c.Icon))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Delete complete. Closing!")
delete.Close()
}
func (d *DownloadStats) Delete() {
db := openDB()
defer db.Close()
LogMsg("Deleting %+v", d)
delete, err := db.Query(fmt.Sprintf("DELETE FROM companionapps WHERE Identifier='%+v' AND Rating='%+v' AND Review='%+v' AND GlassAppID='%+v'",
d.Identifier, d.Rating, d.Review, d.GlassAppID))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Delete complete. Closing!")
delete.Close()
}
func (a *AuthToken) Delete() {
db := openDB()
defer db.Close()
LogMsg("Deleting %+v", a)
delete, err := db.Query(fmt.Sprintf("DELETE FROM authtoken WHERE Identifier='%+v' AND Email='%+v' AND Username='%+v' AND PasswordHash='%+v' AND LastIP='%+v' AND AuthToken='%+v' AND PreviousHash='%+v' AND Current='%+v'",
a.Identifier, a.Email, a.Username, a.PasswordHash, a.LastIP, a.AuthToken, a.PreviousHash, a.Current))
if err != nil {
LogMsg("%+v", err)
}
LogMsg("Delete complete. Closing!")
delete.Close()
}