Web API (#2)
parent
bfe77e9da6
commit
3ce698c397
|
@ -8,15 +8,17 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"go.etztech.xyz/go-mcm"
|
||||||
"go.etztech.xyz/go-mcm/model"
|
"go.etztech.xyz/go-mcm/model"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
query := model.NewQuery("<token>", "https://24carrotcraft.com/whitelist/api")
|
client := mcm.NewMCM("<token>", "https://24carrotcraft.com/whitelist/api")
|
||||||
builder := query.NewDjangoBuilder().Contains(django.PlayerUsername, "Etzelia")
|
model := client.NewModel()
|
||||||
|
builder := model.NewDjangoBuilder().Contains(django.PlayerUsername, "Etzelia")
|
||||||
|
|
||||||
players, err := query.Player(builder)
|
players, err := model.Player(builder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ResponseGet(endpoint string) ([]byte, error) {
|
||||||
|
resp, err := http.Get(endpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return body, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponsePost(endpoint string, form url.Values) ([]byte, error) {
|
||||||
|
resp, err := http.PostForm(endpoint, form)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return body, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type Status struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package mcm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"go.etztech.xyz/go-mcm/model"
|
||||||
|
"go.etztech.xyz/go-mcm/web"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MCM struct {
|
||||||
|
Token string
|
||||||
|
URL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMCM(token, baseURL string) *MCM {
|
||||||
|
return &MCM{
|
||||||
|
Token: token,
|
||||||
|
URL: strings.TrimRight(baseURL, "/"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mcm *MCM) NewModel() *model.Model {
|
||||||
|
return &model.Model{
|
||||||
|
Token: mcm.Token,
|
||||||
|
URL: fmt.Sprintf("%s/model", strings.TrimRight(mcm.URL, "/")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mcm *MCM) NewWeb() *web.Web {
|
||||||
|
return &web.Web{
|
||||||
|
Token: mcm.Token,
|
||||||
|
URL: fmt.Sprintf("%s/web", strings.TrimRight(mcm.URL, "/")),
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,11 +15,11 @@ type Alert struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) Alert(builder *django.Builder) ([]*Alert, error) {
|
func (q *Model) Alert(builder *django.Builder) ([]*Alert, error) {
|
||||||
endpoint := q.endpoint("alert", builder.QueryString())
|
endpoint := q.endpoint("alert", builder.QueryString())
|
||||||
alerts := make([]*Alert, 0)
|
alerts := make([]*Alert, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,11 +20,11 @@ type Application struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) Application(builder *django.Builder) ([]*Application, error) {
|
func (q *Model) Application(builder *django.Builder) ([]*Application, error) {
|
||||||
endpoint := q.endpoint("application", builder.QueryString())
|
endpoint := q.endpoint("application", builder.QueryString())
|
||||||
applications := make([]*Application, 0)
|
applications := make([]*Application, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -12,11 +13,11 @@ type IP struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) IP(builder *django.Builder) ([]*IP, error) {
|
func (q *Model) IP(builder *django.Builder) ([]*IP, error) {
|
||||||
endpoint := q.endpoint("ip", builder.QueryString())
|
endpoint := q.endpoint("ip", builder.QueryString())
|
||||||
ips := make([]*IP, 0)
|
ips := make([]*IP, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,45 +3,28 @@ package model
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Query struct {
|
type Model struct {
|
||||||
Token string
|
Token string
|
||||||
URL string
|
URL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewQuery(token, baseURL string) *Query {
|
func NewModel(token, baseURL string) *Model {
|
||||||
return &Query{
|
return &Model{
|
||||||
Token: token,
|
Token: token,
|
||||||
URL: fmt.Sprintf("%s/model", strings.TrimRight(baseURL, "/")),
|
URL: fmt.Sprintf("%s/model", strings.TrimRight(baseURL, "/")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) NewDjangoBuilder() *django.Builder {
|
func (q *Model) NewDjangoBuilder() *django.Builder {
|
||||||
return django.NewBuilder(q.Token)
|
return django.NewBuilder(q.Token)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) endpoint(model, query string) string {
|
func (q *Model) endpoint(model, query string) string {
|
||||||
if !strings.HasPrefix(query, "?") {
|
if !strings.HasPrefix(query, "?") {
|
||||||
query = "?" + query
|
query = "?" + query
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s/%s%s", q.URL, model, query)
|
return fmt.Sprintf("%s/%s%s", q.URL, model, query)
|
||||||
}
|
}
|
||||||
|
|
||||||
func response(endpoint string) ([]byte, error) {
|
|
||||||
resp, err := http.Get(endpoint)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return body, err
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,11 +24,11 @@ type Note struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) Note(builder *django.Builder) ([]*Note, error) {
|
func (q *Model) Note(builder *django.Builder) ([]*Note, error) {
|
||||||
endpoint := q.endpoint("note", builder.QueryString())
|
endpoint := q.endpoint("note", builder.QueryString())
|
||||||
notes := make([]*Note, 0)
|
notes := make([]*Note, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,11 +17,11 @@ type Player struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) Player(builder *django.Builder) ([]*Player, error) {
|
func (q *Model) Player(builder *django.Builder) ([]*Player, error) {
|
||||||
endpoint := q.endpoint("player", builder.QueryString())
|
endpoint := q.endpoint("player", builder.QueryString())
|
||||||
players := make([]*Player, 0)
|
players := make([]*Player, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,11 +37,11 @@ type Ticket struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) Ticket(builder *django.Builder) ([]*Ticket, error) {
|
func (q *Model) Ticket(builder *django.Builder) ([]*Ticket, error) {
|
||||||
endpoint := q.endpoint("ticket", builder.QueryString())
|
endpoint := q.endpoint("ticket", builder.QueryString())
|
||||||
tickets := make([]*Ticket, 0)
|
tickets := make([]*Ticket, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -15,11 +16,11 @@ type TicketNote struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) TicketNote(builder *django.Builder) ([]*TicketNote, error) {
|
func (q *Model) TicketNote(builder *django.Builder) ([]*TicketNote, error) {
|
||||||
endpoint := q.endpoint("ticketnote", builder.QueryString())
|
endpoint := q.endpoint("ticketnote", builder.QueryString())
|
||||||
ticketNotes := make([]*TicketNote, 0)
|
ticketNotes := make([]*TicketNote, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
"go.etztech.xyz/go-mcm/model/django"
|
"go.etztech.xyz/go-mcm/model/django"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,11 +37,11 @@ type UserSettings struct {
|
||||||
Link string `json:"link"`
|
Link string `json:"link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Query) UserSettings(builder *django.Builder) ([]*UserSettings, error) {
|
func (q *Model) UserSettings(builder *django.Builder) ([]*UserSettings, error) {
|
||||||
endpoint := q.endpoint("usersettings", builder.QueryString())
|
endpoint := q.endpoint("usersettings", builder.QueryString())
|
||||||
userSettingss := make([]*UserSettings, 0)
|
userSettingss := make([]*UserSettings, 0)
|
||||||
|
|
||||||
resp, err := response(endpoint)
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (web *Web) Alert(message string, ping bool) (*internal.Status, error) {
|
||||||
|
endpoint := web.endpoint("alert")
|
||||||
|
status := &internal.Status{}
|
||||||
|
|
||||||
|
form := url.Values{}
|
||||||
|
form.Add("api", web.Token)
|
||||||
|
form.Add("message", message)
|
||||||
|
if ping {
|
||||||
|
form.Add("ping", "True")
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := internal.ResponsePost(endpoint, form)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &status)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return status, nil
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (web *Web) Discord(message string, ping bool) (*internal.Status, error) {
|
||||||
|
endpoint := web.endpoint("discord")
|
||||||
|
status := &internal.Status{}
|
||||||
|
|
||||||
|
form := url.Values{}
|
||||||
|
form.Add("api", web.Token)
|
||||||
|
form.Add("message", message)
|
||||||
|
if ping {
|
||||||
|
form.Add("ping", "True")
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := internal.ResponsePost(endpoint, form)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &status)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return status, nil
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Log struct {
|
||||||
|
Chats Chats `json:"chats"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Chats struct {
|
||||||
|
Global []Entry `json:"global"`
|
||||||
|
Staff []Entry `json:"staff"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Entry struct {
|
||||||
|
Date string `json:"date"`
|
||||||
|
Text string `json:"text"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (web *Web) Log() (*Log, error) {
|
||||||
|
endpoint := fmt.Sprintf("%s?api=%s", web.endpoint("log"), web.Token)
|
||||||
|
log := &Log{}
|
||||||
|
|
||||||
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &log)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return log, nil
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"go.etztech.xyz/go-mcm/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Online struct {
|
||||||
|
Query Query `json:"query"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Query struct {
|
||||||
|
Max string `json:"max"`
|
||||||
|
Online string `json:"online"`
|
||||||
|
Players []string `json:"players"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (web *Web) Online() (*Online, error) {
|
||||||
|
endpoint := fmt.Sprintf("%s?api=%s", web.endpoint("online"), web.Token)
|
||||||
|
online := &Online{}
|
||||||
|
|
||||||
|
resp, err := internal.ResponseGet(endpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(resp, &online)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return online, nil
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Web struct {
|
||||||
|
Token string
|
||||||
|
URL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWeb(token, baseURL string) *Web {
|
||||||
|
return &Web{
|
||||||
|
Token: token,
|
||||||
|
URL: fmt.Sprintf("%s/web", strings.TrimRight(baseURL, "/")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (web *Web) endpoint(endpoint string) string {
|
||||||
|
return fmt.Sprintf("%s/%s/", web.URL, endpoint)
|
||||||
|
}
|
Loading…
Reference in New Issue