689b1a804b
Added an executable file. Only works on Windows, if it doesn't work, then try building it for yourself with build.bat or go build Tweaked run.bat to make it more firewall friendly. It now generates an executable. Moved the files around to make it more organised. Added build.bat which you can use to build the program for you and install the libraries the software depends on.
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package main
|
|
import "log"
|
|
import "strconv"
|
|
import "net/http"
|
|
import "golang.org/x/crypto/bcrypt"
|
|
import "database/sql"
|
|
import _ "github.com/go-sql-driver/mysql"
|
|
|
|
type User struct
|
|
{
|
|
ID int
|
|
Name string
|
|
Group int
|
|
Is_Admin bool
|
|
Is_Super_Admin bool
|
|
Is_Banned bool
|
|
Session string
|
|
Loggedin bool
|
|
Avatar string
|
|
}
|
|
|
|
func SetPassword(uid int, password string) (error) {
|
|
salt, err := GenerateSafeString(saltLength)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
password = password + salt
|
|
hashed_password, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = set_password_stmt.Exec(string(hashed_password), salt, uid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func SessionCheck(w http.ResponseWriter, r *http.Request) (User) {
|
|
user := User{0,"",0,false,false,false,"",false,""}
|
|
var err error
|
|
var cookie *http.Cookie
|
|
|
|
// Are there any session cookies..?
|
|
// Assign it to user.name to avoid having to create a temporary variable for the type conversion
|
|
cookie, err = r.Cookie("uid")
|
|
if err != nil {
|
|
return user
|
|
}
|
|
user.Name = cookie.Value
|
|
user.ID, err = strconv.Atoi(user.Name)
|
|
if err != nil {
|
|
return user
|
|
}
|
|
cookie, err = r.Cookie("session")
|
|
if err != nil {
|
|
return user
|
|
}
|
|
user.Session = cookie.Value
|
|
//log.Print("ID: " + user.Name)
|
|
//log.Print("Session: " + user.Session)
|
|
|
|
// Is this session valid..?
|
|
err = get_session_stmt.QueryRow(user.ID,user.Session).Scan(&user.ID, &user.Name, &user.Group, &user.Is_Super_Admin, &user.Session, &user.Avatar)
|
|
if err == sql.ErrNoRows {
|
|
return user
|
|
} else if err != nil {
|
|
log.Print(err)
|
|
return user
|
|
}
|
|
user.Is_Admin = (user.Is_Super_Admin || groups[user.Group].Is_Admin)
|
|
user.Is_Banned = groups[user.Group].Is_Banned
|
|
if user.Avatar != "" && user.Avatar[0] == '.' {
|
|
user.Avatar = "/uploads/avatar_" + strconv.Itoa(user.ID) + user.Avatar
|
|
}
|
|
user.Loggedin = true
|
|
/*log.Print("Logged in")
|
|
log.Print("ID: " + strconv.Itoa(user.ID))
|
|
log.Print("Group: " + strconv.Itoa(user.Group))
|
|
log.Print("Name: " + user.Name)
|
|
if user.Loggedin {
|
|
log.Print("Loggedin: true")
|
|
} else {
|
|
log.Print("Loggedin: false")
|
|
}
|
|
if user.Is_Admin {
|
|
log.Print("Is_Admin: true")
|
|
} else {
|
|
log.Print("Is_Admin: false")
|
|
}*/
|
|
return user
|
|
} |