302 lines
7.8 KiB
Go
302 lines
7.8 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"strconv"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
// TODO: replace with simple ResponseInfo containing userid
|
|
type clanData struct {
|
|
baseTemplateData
|
|
ClanID int
|
|
}
|
|
|
|
|
|
func leaveClan(c *gin.Context) {
|
|
i := c.Param("cid")
|
|
// login check
|
|
if getContext(c).User.ID == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ? AND clan = ? AND perms = 8", getContext(c).User.ID, i).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
// check if a nigga the clan
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ? AND clan = ?", getContext(c).User.ID, i).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
addMessage(c, errorMessage{T(c, "Unexpected Error...")})
|
|
return
|
|
}
|
|
// idk how the fuck this gonna work but fuck it
|
|
|
|
|
|
db.Exec("DELETE FROM user_clans WHERE user = ? AND clan = ?", getContext(c).User.ID, i)
|
|
addMessage(c, successMessage{T(c, "Left clan.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/c/"+i)
|
|
} else {
|
|
//check if user even in clan!!!
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ? AND clan = ?", getContext(c).User.ID, i).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
addMessage(c, errorMessage{T(c, "Unexpected Error...")})
|
|
return
|
|
}
|
|
// delete invites
|
|
db.Exec("DELETE FROM clans_invites WHERE clan = ?", i)
|
|
// delete all members out of clan :c
|
|
db.Exec("DELETE FROM user_clans WHERE clan = ?", i)
|
|
// delete clan :c
|
|
db.Exec("DELETE FROM clans WHERE id = ?", i)
|
|
|
|
addMessage(c, successMessage{T(c, "Disbanded Clan.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/clans?mode=0")
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
func clanPage(c *gin.Context) {
|
|
var (
|
|
clanID int
|
|
clanName string
|
|
clanDescription string
|
|
clanIcon string
|
|
)
|
|
|
|
// ctx := getContext(c)
|
|
|
|
i := c.Param("cid")
|
|
if _, err := strconv.Atoi(i); err != nil {
|
|
err := db.QueryRow("SELECT id, name, description, icon FROM clans WHERE name = ? LIMIT 1", i).Scan(&clanID, &clanName, &clanDescription, &clanIcon)
|
|
if err != nil && err != sql.ErrNoRows {
|
|
c.Error(err)
|
|
}
|
|
} else {
|
|
err := db.QueryRow(`SELECT id, name, description, icon FROM clans WHERE id = ? LIMIT 1`, i).Scan(&clanID, &clanName, &clanDescription, &clanIcon)
|
|
switch {
|
|
case err == nil:
|
|
case err == sql.ErrNoRows:
|
|
err := db.QueryRow("SELECT id, name, description, icon FROM clans WHERE name = ? LIMIT 1", i).Scan(&clanID, &clanName, &clanDescription, &clanIcon)
|
|
if err != nil && err != sql.ErrNoRows {
|
|
c.Error(err)
|
|
}
|
|
default:
|
|
c.Error(err)
|
|
}
|
|
}
|
|
|
|
data := new(clanData)
|
|
data.ClanID = clanID
|
|
defer resp(c, 200, "clansample.html", data)
|
|
|
|
if data.ClanID == 0 {
|
|
data.TitleBar = "Clan not found"
|
|
data.Messages = append(data.Messages, warningMessage{T(c, "That clan could not be found.")})
|
|
return
|
|
}
|
|
|
|
if getContext(c).User.Privileges&1 > 0 {
|
|
if db.QueryRow("SELECT 1 FROM clans WHERE clan = ?", clanID).Scan(new(string)) != sql.ErrNoRows {
|
|
var bg string
|
|
db.QueryRow("SELECT background FROM clans WHERE id = ?", clanID).Scan(&bg)
|
|
data.KyutGrill = bg
|
|
data.KyutGrillAbsolute = true
|
|
}
|
|
}
|
|
|
|
data.TitleBar = T(c, "%s's Clan Page", clanName)
|
|
data.DisableHH = true
|
|
// data.Scripts = append(data.Scripts, "/static/profile.js")
|
|
}
|
|
|
|
func checkCount(rows *sql.Rows) (count int) {
|
|
for rows.Next() {
|
|
err:= rows.Scan(&count)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
return count
|
|
}
|
|
|
|
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
|
|
|
func randSeq(n int) string {
|
|
rand.Seed(time.Now().UnixNano()+int64(3))
|
|
b := make([]rune, n)
|
|
for i := range b {
|
|
b[i] = letters[rand.Intn(len(letters))]
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func createInvite(c *gin.Context) {
|
|
ctx := getContext(c)
|
|
if string(c.PostForm("password")) == "" && string(c.PostForm("email")) == "" && string(c.PostForm("tag")) == "" && string(c.PostForm("bg")) == "" {
|
|
|
|
|
|
if ctx.User.ID == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
// big perms check lol ok
|
|
var perms int
|
|
db.QueryRow("SELECT perms FROM user_clans WHERE user = ? AND perms = 8 LIMIT 1", ctx.User.ID).Scan(&perms)
|
|
// delete old invite
|
|
var clan int
|
|
db.QueryRow("SELECT clan FROM user_clans WHERE user = ? AND perms = 8 LIMIT 1", ctx.User.ID).Scan(&clan)
|
|
if clan == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
db.Exec("DELETE FROM clans_invites WHERE clan = ?", clan)
|
|
|
|
var s string
|
|
|
|
s = randSeq(8)
|
|
|
|
db.Exec("INSERT INTO clans_invites(clan, invite) VALUES (?, ?)", clan, s)
|
|
} else {
|
|
// big perms check lol ok
|
|
var perms int
|
|
db.QueryRow("SELECT perms FROM user_clans WHERE user = ? AND perms = 8 LIMIT 1", ctx.User.ID).Scan(&perms)
|
|
// delete old invite
|
|
var clan int
|
|
db.QueryRow("SELECT clan FROM user_clans WHERE user = ? AND perms = 8 LIMIT 1", ctx.User.ID).Scan(&clan)
|
|
if clan == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
tag := "0"
|
|
if c.PostForm("tag") != "" {
|
|
tag = c.PostForm("tag")
|
|
}
|
|
|
|
if db.QueryRow("SELECT 1 FROM clans WHERE tag = ? AND id != ?", c.PostForm("tag"), clan).
|
|
Scan(new(int)) != sql.ErrNoRows {
|
|
resp403(c)
|
|
addMessage(c, errorMessage{T(c, "A clan with that tag already exists...")})
|
|
return
|
|
}
|
|
|
|
db.Exec("UPDATE clans SET description = ?, icon = ?, tag = ?, background = ? WHERE id = ?", c.PostForm("password"), c.PostForm("email"), tag, c.PostForm("bg"), clan)
|
|
}
|
|
addMessage(c, successMessage{T(c, "Success")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/settings/clansettings")
|
|
}
|
|
|
|
|
|
func clanInvite(c *gin.Context) {
|
|
i := c.Param("inv")
|
|
|
|
res := resolveInvite(i)
|
|
s := strconv.Itoa(res)
|
|
if res != 0 {
|
|
|
|
// check if a nigga logged in
|
|
if getContext(c).User.ID == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
// restricted stuff
|
|
if getContext(c).User.Privileges & 1 != 1 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
// check if clan even exists?
|
|
if db.QueryRow("SELECT 1 FROM clans WHERE id = ?", res).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
|
|
addMessage(c, errorMessage{T(c, "Clan doesn't exist.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/c/"+s)
|
|
return
|
|
}
|
|
// check if a nigga in a clan already
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ?", getContext(c).User.ID).
|
|
Scan(new(int)) != sql.ErrNoRows {
|
|
|
|
addMessage(c, errorMessage{T(c, "Seems like you're already in a Clan")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/c/"+s)
|
|
return
|
|
}
|
|
|
|
// idk how the fuck this gonna work but fuck it
|
|
var count int
|
|
var limit int
|
|
// members check
|
|
db.QueryRow("SELECT COUNT(*) FROM user_clans WHERE clan = ? ", res).Scan(&count)
|
|
db.QueryRow("SELECT mlimit FROM clans WHERE id = ? ", res).Scan(&limit)
|
|
if count >= limit {
|
|
addMessage(c, errorMessage{T(c, "Sorry, this clan is full.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/c/"+s)
|
|
return
|
|
}
|
|
// join
|
|
db.Exec("INSERT INTO `user_clans`(user, clan, perms) VALUES (?, ?, 1);", getContext(c).User.ID, res)
|
|
addMessage(c, successMessage{T(c, "Joined clan.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/c/"+s)
|
|
} else {
|
|
resp403(c)
|
|
addMessage(c, errorMessage{T(c, "nah nigga")})
|
|
}
|
|
}
|
|
|
|
func clanKick(c *gin.Context) {
|
|
if getContext(c).User.ID == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ? AND perms = 8", getContext(c).User.ID).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
member, err := strconv.ParseInt(c.PostForm("member"), 10, 32)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
if member == 0 {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
if db.QueryRow("SELECT 1 FROM user_clans WHERE user = ? AND perms = 1", member).
|
|
Scan(new(int)) == sql.ErrNoRows {
|
|
resp403(c)
|
|
return
|
|
}
|
|
|
|
db.Exec("DELETE FROM user_clans WHERE user = ?", member)
|
|
addMessage(c, successMessage{T(c, "Success.")})
|
|
getSession(c).Save()
|
|
c.Redirect(302, "/settings/clansettings")
|
|
}
|
|
|
|
func resolveInvite(c string)(int) {
|
|
var clanid int
|
|
row := db.QueryRow("SELECT clan FROM clans_invites WHERE invite = ?", c)
|
|
err := row.Scan(&clanid)
|
|
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
fmt.Println(clanid)
|
|
return clanid
|
|
} |