Files
openaccounting-server/core/api/apikey.go

189 lines
4.7 KiB
Go
Raw Normal View History

2018-10-19 15:31:41 -04:00
package api
import (
"github.com/ant0ine/go-json-rest/rest"
"github.com/openaccounting/oa-server/core/model"
"github.com/openaccounting/oa-server/core/model/types"
"net/http"
)
/**
* @api {get} /apikeys Get API keys
* @apiVersion 1.1.0
2018-10-19 15:31:41 -04:00
* @apiName GetApiKeys
* @apiGroup ApiKey
*
* @apiHeader {String} Authorization HTTP Basic Auth
* @apiHeader {String} Accept-Version ^1.1.0 semver versioning
2018-10-19 15:31:41 -04:00
*
* @apiSuccess {String} id Id of the ApiKey.
* @apiSuccess {Date} inserted Date ApiKey was created
* @apiSuccess {Date} updated Date Last activity for the ApiKey
* @apiSuccess {String} userId Id of the User
* @apiSuccess {String} label Label
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* [
* {
* "id": "11111111111111111111111111111111",
* "inserted": "2018-09-11T18:05:04.420Z",
* "updated": "2018-09-11T18:05:04.420Z",
* "userId": "22222222222222222222222222222222",
* "label": "Shopping Cart"
* }
* ]
*
* @apiUse NotAuthorizedError
* @apiUse InternalServerError
*/
func GetApiKeys(w rest.ResponseWriter, r *rest.Request) {
user := r.Env["USER"].(*types.User)
keys, err := model.Instance.GetApiKeys(user.Id)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteJson(keys)
}
/**
* @api {post} /apikeys Create a new API key
* @apiVersion 1.1.0
2018-10-19 15:31:41 -04:00
* @apiName PostApiKey
* @apiGroup ApiKey
*
* @apiHeader {String} Accept-Version ^1.1.0 semver versioning
2018-10-19 15:31:41 -04:00
* @apiHeader {String} Authorization HTTP Basic Auth
*
* @apiParam {String} id 32 character hex string
* @apiParam {String} label Label
*
* @apiSuccess {String} id Id of the ApiKey.
* @apiSuccess {Date} inserted Date ApiKey was created
* @apiSuccess {Date} updated Date Last activity for the ApiKey
* @apiSuccess {String} userId Id of the User
* @apiSuccess {String} label Label
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "id": "11111111111111111111111111111111",
* "inserted": "2018-09-11T18:05:04.420Z",
* "updated": "2018-09-11T18:05:04.420Z",
* "userId": "22222222222222222222222222222222",
* "label": "Shopping Cart"
* }
*
* @apiUse NotAuthorizedError
* @apiUse InternalServerError
*/
func PostApiKey(w rest.ResponseWriter, r *rest.Request) {
user := r.Env["USER"].(*types.User)
key := &types.ApiKey{}
err := r.DecodeJsonPayload(key)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
key.UserId = user.Id
err = model.Instance.CreateApiKey(key)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteJson(key)
}
/**
* @api {put} /apikeys Modify an API key
* @apiVersion 1.1.0
2018-10-19 15:31:41 -04:00
* @apiName PutApiKey
* @apiGroup ApiKey
*
* @apiHeader {String} Accept-Version ^1.1.0 semver versioning
2018-10-19 15:31:41 -04:00
* @apiHeader {String} Authorization HTTP Basic Auth
*
* @apiParam {String} id 32 character hex string
* @apiParam {String} label Label
*
* @apiSuccess {String} id Id of the ApiKey.
* @apiSuccess {Date} inserted Date ApiKey was created
* @apiSuccess {Date} updated Date Last activity for the ApiKey
* @apiSuccess {String} userId Id of the User
* @apiSuccess {String} label Label
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "id": "11111111111111111111111111111111",
* "inserted": "2018-09-11T18:05:04.420Z",
* "updated": "2018-09-11T18:05:04.420Z",
* "userId": "22222222222222222222222222222222",
* "label": "Shopping Cart"
* }
*
* @apiUse NotAuthorizedError
* @apiUse InternalServerError
*/
func PutApiKey(w rest.ResponseWriter, r *rest.Request) {
user := r.Env["USER"].(*types.User)
key := &types.ApiKey{}
keyId := r.PathParam("apiKeyId")
err := r.DecodeJsonPayload(key)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
key.Id = keyId
key.UserId = user.Id
err = model.Instance.UpdateApiKey(key)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteJson(key)
}
/**
* @api {delete} /apikeys/:apiKeyId Delete an API key
* @apiVersion 1.1.0
2018-10-19 15:31:41 -04:00
* @apiName DeleteApiKey
* @apiGroup ApiKey
*
* @apiHeader {String} Authorization HTTP Basic Auth
* @apiHeader {String} Accept-Version ^1.1.0 semver versioning
2018-10-19 15:31:41 -04:00
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
*
* @apiUse NotAuthorizedError
* @apiUse InternalServerError
*/
func DeleteApiKey(w rest.ResponseWriter, r *rest.Request) {
user := r.Env["USER"].(*types.User)
id := r.PathParam("apiKeyId")
err := model.Instance.DeleteApiKey(id, user.Id)
if err != nil {
rest.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
}