You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package lql
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// V1RawRequestParams is a request for the RAW API
|
|
type V1RawRequestParams struct {
|
|
Method string `json:"method" validate:"required" description:"Either GET or COMMAND"`
|
|
|
|
// COMMAND
|
|
Command string `json:"command" description:"The command, required if method is COMMAND"`
|
|
|
|
// GET
|
|
Table string `json:"table" description:"The table to query, required if method is GET"`
|
|
Columns []string `json:"columns" description:"Columns to query, you should always provide this"`
|
|
Query [][]string `json:"query" description:"raw query Data"`
|
|
|
|
// both
|
|
Limit int `json:"limit" description:"Limit result count"`
|
|
}
|
|
|
|
// GetRaw get a raw request
|
|
func v1RawPost(c *gin.Context, params *V1RawRequestParams) ([]gin.H, error) {
|
|
client, err := GinGetLqlClient(c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
user := c.GetString("user")
|
|
if client.IsAdmin(user) {
|
|
user = ""
|
|
}
|
|
|
|
// Param validation and request building
|
|
request := []string{}
|
|
switch strings.ToLower(params.Method) {
|
|
case "get":
|
|
if params.Table == "" {
|
|
return nil, errors.New("Param table is required with method 'GET'")
|
|
}
|
|
request = append(request, fmt.Sprintf("GET %s", params.Table))
|
|
|
|
if len(params.Columns) > 0 {
|
|
request = append(request, fmt.Sprintf("Columns: %s\n", strings.Join(params.Columns, " ")))
|
|
}
|
|
|
|
if len(params.Query) > 0 {
|
|
for _, q := range params.Query {
|
|
if len(q) != 2 {
|
|
return nil, errors.New("Each query must contain a key and a value")
|
|
}
|
|
request = append(request, fmt.Sprintf("%s: %s", q[0], q[1]))
|
|
}
|
|
}
|
|
break
|
|
case "command":
|
|
if params.Command == "" {
|
|
return nil, errors.New("Param command is required with method 'COMMAND'")
|
|
}
|
|
request = append(request, fmt.Sprintf("COMMAND %s", params.Command))
|
|
break
|
|
default:
|
|
return nil, fmt.Errorf("Unknown Method requested: '%s'", params.Method)
|
|
}
|
|
|
|
return client.Request(c, strings.Join(request, "\n"), user, params.Limit)
|
|
}
|