Initial commit
This commit is contained in:
39
common/conf.go
Normal file
39
common/conf.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/thehowl/conf"
|
||||
)
|
||||
|
||||
// Conf is the configuration file data for the ripple API.
|
||||
// Conf uses https://github.com/thehowl/conf
|
||||
type Conf struct {
|
||||
DatabaseType string `description:"At the moment, 'mysql' is the only supported database type."`
|
||||
DSN string `description:"The Data Source Name for the database. More: https://github.com/go-sql-driver/mysql#dsn-data-source-name"`
|
||||
ListenTo string `description:"The IP/Port combination from which to take connections, e.g. :8080"`
|
||||
Unix bool `description:"Bool indicating whether ListenTo is a UNIX socket or an address."`
|
||||
}
|
||||
|
||||
var cachedConf *Conf
|
||||
|
||||
// Load creates a new Conf, using the data in the file "api.conf".
|
||||
func Load() (c Conf, halt bool) {
|
||||
if cachedConf != nil {
|
||||
c = *cachedConf
|
||||
return
|
||||
}
|
||||
err := conf.Load(&c, "api.conf")
|
||||
halt = err == conf.ErrNoFile
|
||||
if halt {
|
||||
conf.MustExport(Conf{
|
||||
DatabaseType: "mysql",
|
||||
DSN: "root@/ripple",
|
||||
ListenTo: ":40001",
|
||||
Unix: false,
|
||||
}, "api.conf")
|
||||
fmt.Println("Please compile the configuration file (api.conf).")
|
||||
}
|
||||
cachedConf = &c
|
||||
return
|
||||
}
|
15
common/method_data.go
Normal file
15
common/method_data.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// MethodData is a struct containing the data passed over to an API method.
|
||||
type MethodData struct {
|
||||
User Token
|
||||
DB *sql.DB
|
||||
RequestData []byte
|
||||
C *gin.Context
|
||||
}
|
100
common/privileges.go
Normal file
100
common/privileges.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package common
|
||||
|
||||
import "strings"
|
||||
|
||||
// These are the various privileges a token can have.
|
||||
const (
|
||||
PrivilegeRead = 1 << iota // pretty much public data: leaderboard, scores, user profiles (without confidential stuff like email)
|
||||
PrivilegeReadConfidential // (eventual) private messages, reports... of self
|
||||
PrivilegeWrite // change user information, write into confidential stuff...
|
||||
PrivilegeManageBadges // can change various users' badges.
|
||||
PrivilegeBetaKeys // can add, remove, upgrade/downgrade, make public beta keys.
|
||||
PrivilegeManageSettings // maintainance, set registrations, global alerts, bancho settings
|
||||
PrivilegeViewUserAdvanced // can see user email, and perhaps warnings in the future, basically.
|
||||
PrivilegeManageUser // can change user email, allowed status, userpage, rank, username...
|
||||
PrivilegeManageRoles // translates as admin, as they can basically assign roles to anyone, even themselves
|
||||
PrivilegeManageAPIKeys // admin permission to manage user permission, not only self permissions. Only ever do this if you completely trust the application, because this essentially means to put the entire ripple database in the hands of a (potentially evil?) application.
|
||||
PrivilegeBlog // can do pretty much anything to the blog, and the documentation.
|
||||
)
|
||||
|
||||
// Privileges is a bitwise enum of the privileges of an user's API key.
|
||||
type Privileges int
|
||||
|
||||
// HasPrivilegeRead returns whether the Read privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeRead() bool {
|
||||
return p&PrivilegeRead != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeReadConfidential returns whether the ReadConfidential privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeReadConfidential() bool {
|
||||
return p&PrivilegeReadConfidential != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeWrite returns whether the Write privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeWrite() bool {
|
||||
return p&PrivilegeWrite != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeManageBadges returns whether the ManageBadges privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeManageBadges() bool {
|
||||
return p&PrivilegeManageBadges != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeBetaKeys returns whether the BetaKeys privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeBetaKeys() bool {
|
||||
return p&PrivilegeBetaKeys != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeManageSettings returns whether the ManageSettings privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeManageSettings() bool {
|
||||
return p&PrivilegeManageSettings != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeViewUserAdvanced returns whether the ViewUserAdvanced privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeViewUserAdvanced() bool {
|
||||
return p&PrivilegeViewUserAdvanced != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeManageUser returns whether the ManageUser privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeManageUser() bool {
|
||||
return p&PrivilegeManageUser != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeManageRoles returns whether the ManageRoles privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeManageRoles() bool {
|
||||
return p&PrivilegeManageRoles != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeManageAPIKeys returns whether the ManageAPIKeys privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeManageAPIKeys() bool {
|
||||
return p&PrivilegeManageAPIKeys != 0
|
||||
}
|
||||
|
||||
// HasPrivilegeBlog returns whether the Blog privilege is included in the privileges.
|
||||
func (p Privileges) HasPrivilegeBlog() bool {
|
||||
return p&PrivilegeBlog != 0
|
||||
}
|
||||
|
||||
var privilegeString = [...]string{
|
||||
"Read",
|
||||
"ReadConfidential",
|
||||
"Write",
|
||||
"ManageBadges",
|
||||
"BetaKeys",
|
||||
"ManageSettings",
|
||||
"ViewUserAdvanced",
|
||||
"ManageUser",
|
||||
"ManageRoles",
|
||||
"ManageAPIKeys",
|
||||
"Blog",
|
||||
}
|
||||
|
||||
func (p Privileges) String() string {
|
||||
var pvs []string
|
||||
for i, v := range privilegeString {
|
||||
if int(p)&(1<<uint(i)) != 0 {
|
||||
pvs = append(pvs, v)
|
||||
}
|
||||
}
|
||||
return strings.Join(pvs, ", ")
|
||||
}
|
7
common/response.go
Normal file
7
common/response.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package common
|
||||
|
||||
type Response struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
8
common/token.go
Normal file
8
common/token.go
Normal file
@@ -0,0 +1,8 @@
|
||||
package common
|
||||
|
||||
// Token Is an API token.
|
||||
type Token struct {
|
||||
Value string
|
||||
UserID int
|
||||
Privileges Privileges
|
||||
}
|
Reference in New Issue
Block a user