import stampit from 'stampit'; import _ from 'lodash'; import {Meta, Model} from './base'; import {BaseQuerySet, Get, Create, BulkCreate, Delete, Update, List} from '../querySet'; const ApiKeyQuerySet = stampit().compose( BaseQuerySet, Get, Create, BulkCreate, Delete, Update, List ).methods({ reset(properties = {}) { this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.endpoint = 'reset'; return this; } }); const ApiKeyMeta = Meta({ name: 'apiKey', pluralName: 'apiKeys', endpoints: { 'detail': { 'methods': ['delete', 'patch', 'put', 'get'], 'path': '/v1.1/instances/{instanceName}/api_keys/{id}/' }, 'list': { 'methods': ['post', 'get'], 'path': '/v1.1/instances/{instanceName}/api_keys/' }, 'reset': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/api_keys/{id}/reset_key/' } } }); const ApiKeyConstraints = { instanceName: { presence: true, length: { minimum: 5 } }, description: { string: true }, ignore_acl: { boolean: true }, allow_user_create: { boolean: true }, allow_anonymous_read: { boolean: true } }; /** * OO wrapper around instance api keys {@link http://docs.syncano.io/docs/authentication endpoint}. * @constructor * @type {ApiKey} * @property {Number} id * @property {String} instanceName * @property {String} [api_key = null] * @property {Boolean} [allow_user_create = null] * @property {Boolean} [ignore_acl = null] * @property {String} [links = {}] */ const ApiKey = stampit() .compose(Model) .setMeta(ApiKeyMeta) .methods({ reset() { const meta = this.getMeta(); const path = meta.resolveEndpointPath('reset', this); return this.makeRequest('POST', path); } }) .setQuerySet(ApiKeyQuerySet) .setConstraints(ApiKeyConstraints); export default ApiKey;