Documentation
¶
Index ¶
- Constants
- Variables
- func GetUserIdentity(r *http.Request) (identity string, ok bool)
- func Max(x, y int64) int64
- func Min(x, y int64) int64
- func NewPaginationRequest(r *http.Request) (*PaginationRequest, *ErrMsg)
- func NewRouter(routes Routes) *mux.Router
- func RandomString(strlen int) string
- func ReadEnvVar(name string) (string, error)
- func SameElements(a0, b0 []string) bool
- func StrToSlice(tagsStr string) []string
- func Trace() string
- func Unzip(buff bytes.Buffer, size int64, dest string, verbose bool) error
- func UnzipFile(zipfile string, dest string, verbose bool) error
- func UnzipImpl(reader *zip.Reader, dest string, verbose bool) error
- func WritePaginationHeaders(page PaginationResult, w http.ResponseWriter, r *http.Request) error
- type DatabaseConfig
- type Detail
- type ErrMsg
- type FormatHandler
- type FormatHandlers
- type Handler
- type HandlerWithResult
- type Header
- type Method
- type Methods
- type PaginationRequest
- type PaginationResult
- type ProtoResult
- type Route
- type Routes
- type SecureMethods
- type Server
- type TypeJSONResult
Constants ¶
const ErrorAuthJWTInvalid = 4001
ErrorAuthJWTInvalid is triggered when is not possible to get a user ID from the JWT in the request
const ErrorAuthNoUser = 4000
ErrorAuthNoUser is triggered when there's no user in the database with the claimed user ID.
const ErrorCreatingDir = 100002
ErrorCreatingDir is triggered when the server was unable to create a new directory for a resource (no space on device or a temporary server problem).
const ErrorCreatingFile = 100004
ErrorCreatingFile is triggered when the server was unable to create a new file for a resource (no space on device or a temporary server problem).
const ErrorCreatingRepo = 100003
ErrorCreatingRepo is triggered when the server was unable to create a new repository for a resource (no space on device or a temporary server problem).
const ErrorDbDelete = 1001
ErrorDbDelete is triggered when the database was unable to delete a resource
const ErrorDbSave = 1002
ErrorDbSave is triggered when the database was unable to save a resource
const ErrorFileNotFound = 1005
ErrorFileNotFound is triggered when a model's file with the specified name is not found
const ErrorFileTree = 100009
ErrorFileTree is triggered when there was a problem accessing the model's files.
const ErrorForm = 3004
ErrorForm is triggered when an expected field is missing in a multipart form request.
const ErrorFormDuplicateFile = 3014
ErrorFormDuplicateFile is triggered when the POSTed model carries duplicate file entries.
const ErrorFormDuplicateModelName = 3015
ErrorFormDuplicateModelName is triggered when the POSTed model carries duplicate model name.
const ErrorFormInvalidValue = 3013
ErrorFormInvalidValue is triggered when a given form field has an invalid value.
const ErrorFormMissingFiles = 3012
ErrorFormMissingFiles is triggered when the expected "file" field is missing in the multipart form request.
const ErrorIDNotFound = 1003
ErrorIDNotFound is triggered when a resource with the specified id is not found in the database
const ErrorIDNotInRequest = 3000
ErrorIDNotInRequest is triggered when a id is not found in the request
const ErrorIDWrongFormat = 3001
ErrorIDWrongFormat is triggered when an id is not in a valid format
const ErrorInvalidPaginationRequest = 3016
ErrorInvalidPaginationRequest is triggered when the requested pagination is invalid. eg. invalid page or per_page argument values.
const ErrorMarshalJSON = 2000
ErrorMarshalJSON is triggered if there is an error marshalling data into JSON
const ErrorMarshalProto = 2500
ErrorMarshalProto is triggered if there is an error marshalling data into protobuf
const ErrorMissingField = 3009
ErrorMissingField is triggered when the JSON contained in a request does not contain one or more required fields
const ErrorModelNotInRequest = 3011
ErrorModelNotInRequest is triggered when a model is not found in the request
const ErrorNameNotFound = 1004
ErrorNameNotFound is triggered when a resource with the specified name is not found in the database
const ErrorNameWrongFormat = 3002
ErrorNameWrongFormat is triggered when a name is not in a valid format
const ErrorNoDatabase = 1000
ErrorNoDatabase is triggered when the database connection is unavailable
const ErrorNonExistentResource = 100006
ErrorNonExistentResource is triggered when the server was unable to find a resource.
const ErrorOwnerNotInRequest = 3010
ErrorOwnerNotInRequest is triggered when an owner is not found in the request
const ErrorPaginationPageNotFound = 3017
ErrorPaginationPageNotFound is triggered when the requested page is empty / not found.
const ErrorPayloadEmpty = 3003
ErrorPayloadEmpty is triggered when payload is expected but is not found in the request
const ErrorRemovingDir = 100008
ErrorRemovingDir is triggered when the server was unable to remove a directory.
const ErrorRepo = 100007
ErrorRepo is triggered when the server was unable to handle repo command.
const ErrorResourceExists = 100001
ErrorResourceExists is triggered when the server cannot create a new resource because the requested id already exists. E.g.: When the creation of a new model is requested but the server already has a model with the same id.
ErrorUnauthorized is triggered when a user is not authorized to perform a given action.
const ErrorUnexpectedID = 3005
ErrorUnexpectedID is triggered when the id of a file attached in a request is not expected. E.g.: When the attached world file does not end in ".world" during a world creation request.
const ErrorUnknownSuffix = 3006
ErrorUnknownSuffix is triggered when a suffix for content negotiation is not recognized.
const ErrorUnmarshalJSON = 2001
ErrorUnmarshalJSON is triggered if there is an error unmarshalling JSON
const ErrorUnzipping = 100005
ErrorUnzipping is triggered when the server was unable to unzip a zipped file
const ErrorUserNotInRequest = 3007
ErrorUserNotInRequest is triggered when the user/team is not found in the request.
const ErrorUserUnknown = 3008
ErrorUserUnknown is triggered when the user/team does not exist on the server
const ErrorZipNotAvailable = 100000
ErrorZipNotAvailable is triggered when the server does not have a zip file for the requested resource
Variables ¶
var AuthHeadersOptional = []Header{ { Name: "authorization: Bearer <YOUR_JWT_TOKEN>", HeaderDetails: Detail{ Required: false, }, }, }
AuthHeadersOptional is an array of Headers needed when authentication is optional.
var AuthHeadersRequired = []Header{ { Name: "authorization: Bearer <YOUR_JWT_TOKEN>", HeaderDetails: Detail{ Required: true, }, }, }
AuthHeadersRequired is an array of Headers needed when authentication is required.
Functions ¶
func GetUserIdentity ¶
GetUserIdentity returns the user identity found in the http request's JWT token.
func Max ¶
Max is an implementation of "int" Max See https://mrekucci.blogspot.com.ar/2015/07/dont-abuse-mathmax-mathmin.html
func Min ¶
Min is an implementation of "int" Min See https://mrekucci.blogspot.com.ar/2015/07/dont-abuse-mathmax-mathmin.html
func NewPaginationRequest ¶
func NewPaginationRequest(r *http.Request) (*PaginationRequest, *ErrMsg)
NewPaginationRequest creates a new PaginationRequest from the given http request.
func RandomString ¶
RandomString creates a random string of a given length. Ref: https://siongui.github.io/2015/04/13/go-generate-random-string/
func ReadEnvVar ¶
ReadEnvVar reads an environment variable and return an error if not present
func SameElements ¶
SameElements returns True if the two given string slices contain the same elements, even in different order.
func StrToSlice ¶
StrToSlice returns the slice of strings with all tags parsed from the input string. It will trim leading and trailing whitespace, and reduce middle whitespaces to 1 space. It will also remove 'empty' tags (ie. whitespaces enclosed with commas, ', ,') The input string contains tags separated with commas. E.g. input string: " tag1, tag2, tag3 , , " E.g. output: ["tag1", "tag2", "tag3"]
func Trace ¶
func Trace() string
Trace returns the filename, line and function name of its caller. Ref: http://stackoverflow.com/questions/25927660/golang-get-current-scope-of-function-name
func WritePaginationHeaders ¶
func WritePaginationHeaders(page PaginationResult, w http.ResponseWriter, r *http.Request) error
WritePaginationHeaders writes the 'next', 'last', 'first', and 'prev' Link headers to the given ResponseWriter.
Types ¶
type DatabaseConfig ¶
type DatabaseConfig struct {
// Username to login to a database.
UserName string
// Password to login to a database.
Password string
// Address of the database.
Address string
// Name of the database.
Name string
// Allowed Max Open Connections.
// A value <= 0 means unlimited connections.
// See 'https://golang.org/src/database/sql/sql.go'
MaxOpenConns int
}
DatabaseConfig contains information about a database connection
type Detail ¶
type Detail struct {
Type string `json:"type"`
Description string `json:"description"`
Required bool `json:"required"`
}
Detail stores information about a paramter.
type ErrMsg ¶
type ErrMsg struct {
// Internal error code.
ErrCode int `json:"errcode"`
// HTTP status code.
StatusCode int `json:"-"`
// Error message.
Msg string `json:"msg"`
// Extra information/arguments associated to Error message.
Extra []string `json:"extra"`
// The root cause error
BaseError error `json:"-"`
// Generated ID for easy tracking in server logs
ErrID string `json:"errid"`
}
ErrMsg is serialized as JSON, and returned if the request does not succeed TODO: consider making ErrMsg an 'error'
func ErrorMessage ¶
ErrorMessage receives an error code and generate an error message response
func ErrorMessageOK ¶
func ErrorMessageOK() ErrMsg
ErrorMessageOK creates an ErrMsg initialized with OK (default) values.
func NewErrorMessage ¶
NewErrorMessage is a convenience function that receives an error code and returns a pointer to an ErrMsg.
func NewErrorMessageWithArgs ¶
NewErrorMessageWithArgs receives an error code, a root error, and a slice of extra arguments, and returns a pointer to an ErrMsg.
func NewErrorMessageWithBase ¶
NewErrorMessageWithBase receives an error code and a root error and returns a pointer to an ErrMsg.
type FormatHandler ¶
type FormatHandler struct {
// Format (eg: .json, .proto, .html)
Extension string `json:"extension"`
// Processor for the url pattern
Handler http.Handler `json:"-"`
}
FormatHandler represents a format type string, and handler function pair. Handlers are called in response to a route request.
type FormatHandlers ¶
type FormatHandlers []FormatHandler
FormatHandlers is a slice of FormatHandler values.
type Handler ¶
type Handler func(http.ResponseWriter, *http.Request) *ErrMsg
Handler represents an HTTP Handler that can also return a ErrMsg See https://blog.golang.org/error-handling-and-go
type HandlerWithResult ¶
type HandlerWithResult func(w http.ResponseWriter, r *http.Request) (interface{}, *ErrMsg)
HandlerWithResult represents an HTTP Handler that that has a result
type Method ¶
type Method struct {
// GET, POST, PUT, DELETE
// \todo: Make this an enum
Type string `json:"type"`
// Description of the method
Description string `json:"description"`
// A slice of hanlders used to process this method.
Handlers FormatHandlers `json:"handler"`
}
Method associates an HTTP method (GET, POST, PUT, DELETE) with a list of handlers.
type PaginationRequest ¶
type PaginationRequest struct {
// Flag that indicates if the request included a "page" argument.
PageRequested bool
// The requested page number (value >= 1)
Page int64
// The requested number of items per page.
PerPage int64
// The original request URL
URL string
}
PaginationRequest represents the pagination values requested in the URL query (eg. ?page=2&per_page=10)
type PaginationResult ¶
type PaginationResult struct {
// Page number
Page int64
// Page size
PerPage int64
// Original request' url
URL string
// Query "total" count (ie. this is NOT the "page" count)
QueryCount int64
// A page is considered "found" if it is within the range of valid pages,
// OR if it is the first page and the DB query is empty. In this empty scenario,
// we want to return status OK with zero elements, rather than a 404 status.
PageFound bool
}
PaginationResult represents the actual pagination output.
func PaginateQuery ¶
func PaginateQuery(q *gorm.DB, result interface{}, p PaginationRequest) (*PaginationResult, error)
PaginateQuery applies a pagination request to a GORM query and executes it. Param[in] q gorm.DB The query to be paginated Param[out] result [interface{}] The paginated list of items Param[in] p The pagination request Returns a PaginationResult describing the returned page.
type ProtoResult ¶
type ProtoResult HandlerWithResult
ProtoResult provides protobuf serialization for handler results
func (ProtoResult) ServeHTTP ¶
func (fn ProtoResult) ServeHTTP(w http.ResponseWriter, r *http.Request)
///////////////////////////////////////////////
type Route ¶
type Route struct {
// Name of the route
Name string `json:"name"`
// Description of the route
Description string `json:"description"`
// URI pattern
URI string `json:"uri"`
// Headers required by the route
Headers []Header `json:"headers"`
// HTTP methods supported by the route
Methods Methods `json:"methods"`
// Secure HTTP methods supported by the route
SecureMethods SecureMethods `json:"secure_methods"`
}
Route is a definition of a route
type SecureMethods ¶
type SecureMethods []Method
SecureMethods is a slice of Method that require authentication.
type Server ¶
type Server struct {
/// Global database interface
Db *gorm.DB
Router *mux.Router
// Port used for non-secure requests
HTTPPort string
// SSLport used for secure requests
SSLport string
// SSLCert is the path to the SSL certificate.
SSLCert string
// SSLKey is the path to the SSL private key.
SSLKey string
// DbConfig contains information about the database
DbConfig DatabaseConfig
// IsTest is true when tests are running.
IsTest bool
// Google Analytics tracking ID. The format is UA-XXXX-Y
GaTrackingID string
// Google Analytics Application Name
GaAppName string
// (optional) A string to use as a prefix to GA Event Category.
GaCategoryPrefix string
// contains filtered or unexported fields
}
Server encapsulates information needed by a downstream application
func (*Server) Auth0RsaPublicKey ¶
Auth0RsaPublicKey return the Auth0 public key
func (*Server) SetAuth0RsaPublicKey ¶
SetAuth0RsaPublicKey sets the server's Auth0 RSA public key
type TypeJSONResult ¶
type TypeJSONResult struct {
// contains filtered or unexported fields
}
TypeJSONResult represents a function result that can be exported to JSON
func JSONListResult ¶
func JSONListResult(wrapper string, handler HandlerWithResult) TypeJSONResult
JSONListResult provides JSON serialization for handler results that are slices of objects.
func JSONResult ¶
func JSONResult(handler HandlerWithResult) TypeJSONResult
JSONResult provides JSON serialization for handler results
func (TypeJSONResult) ServeHTTP ¶
func (t TypeJSONResult) ServeHTTP(w http.ResponseWriter, r *http.Request)
///////////////////////////////////////////////