/** Our data model for representing an API key in the system @class ApiKey @extends Discourse.Model @namespace Discourse @module Discourse **/ Discourse.ApiKey = Discourse.Model.extend({ /** Regenerates the api key @method regenerate @returns {Promise} a promise that resolves to the key **/ regenerate: function() { var self = this; return Discourse.ajax('/admin/api/key', {type: 'PUT', data: {id: this.get('id')}}).then(function (result) { self.set('key', result.api_key.key); return self; }); }, /** Revokes the current key @method revoke @returns {Promise} a promise that resolves when the key has been revoked **/ revoke: function() { return Discourse.ajax('/admin/api/key', {type: 'DELETE', data: {id: this.get('id')}}); } }); Discourse.ApiKey.reopenClass({ /** Creates an API key instance with internal user object @method create @param {Object} the properties to create @returns {Discourse.ApiKey} the ApiKey instance **/ create: function() { var result = this._super.apply(this, arguments); if (result.user) { result.user = Discourse.AdminUser.create(result.user); } return result; }, /** Finds a list of API keys @method find @returns {Promise} a promise that resolves to the array of `Discourse.ApiKey` instances **/ find: function() { return Discourse.ajax("/admin/api").then(function(keys) { return keys.map(function (key) { return Discourse.ApiKey.create(key); }); }); }, /** Generates a master api key and returns it. @method generateMasterKey @returns {Promise} a promise that resolves to a master `Discourse.ApiKey` **/ generateMasterKey: function() { return Discourse.ajax("/admin/api/key", {type: 'POST'}).then(function (result) { return Discourse.ApiKey.create(result.api_key); }); } });