mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 05:50:14 +08:00
DEV: refactoring api-keys (#6931)
This commit is contained in:
parent
9a594fed01
commit
60974932c4
|
@ -1,6 +1,12 @@
|
|||
import ApiKey from "admin/models/api-key";
|
||||
import { default as computed } from "ember-addons/ember-computed-decorators";
|
||||
|
||||
export default Ember.Controller.extend({
|
||||
@computed("model.[]")
|
||||
hasMasterKey(model) {
|
||||
return !!model.findBy("user", null);
|
||||
},
|
||||
|
||||
actions: {
|
||||
generateMasterKey() {
|
||||
ApiKey.generateMasterKey().then(key => this.get("model").pushObject(key));
|
||||
|
@ -31,10 +37,5 @@ export default Ember.Controller.extend({
|
|||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
// Has a master key already been generated?
|
||||
hasMasterKey: function() {
|
||||
return !!this.get("model").findBy("user", null);
|
||||
}.property("model.[]")
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,32 +1,22 @@
|
|||
import AdminUser from "admin/models/admin-user";
|
||||
import { ajax } from "discourse/lib/ajax";
|
||||
|
||||
const ApiKey = Discourse.Model.extend({
|
||||
/**
|
||||
Regenerates the api key
|
||||
const KEY_ENDPOINT = "/admin/api/key";
|
||||
const KEYS_ENDPOINT = "/admin/api/keys";
|
||||
|
||||
@method regenerate
|
||||
@returns {Promise} a promise that resolves to the key
|
||||
**/
|
||||
regenerate: function() {
|
||||
var self = this;
|
||||
return ajax("/admin/api/key", {
|
||||
const ApiKey = Discourse.Model.extend({
|
||||
regenerate() {
|
||||
return ajax(KEY_ENDPOINT, {
|
||||
type: "PUT",
|
||||
data: { id: this.get("id") }
|
||||
}).then(function(result) {
|
||||
self.set("key", result.api_key.key);
|
||||
return self;
|
||||
}).then(result => {
|
||||
this.set("key", result.api_key.key);
|
||||
return this;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
Revokes the current key
|
||||
|
||||
@method revoke
|
||||
@returns {Promise} a promise that resolves when the key has been revoked
|
||||
**/
|
||||
revoke: function() {
|
||||
return ajax("/admin/api/key", {
|
||||
revoke() {
|
||||
return ajax(KEY_ENDPOINT, {
|
||||
type: "DELETE",
|
||||
data: { id: this.get("id") }
|
||||
});
|
||||
|
@ -34,45 +24,24 @@ const ApiKey = Discourse.Model.extend({
|
|||
});
|
||||
|
||||
ApiKey.reopenClass({
|
||||
/**
|
||||
Creates an API key instance with internal user object
|
||||
|
||||
@method create
|
||||
@param {...} var_args the properties to initialize this with
|
||||
@returns {ApiKey} the ApiKey instance
|
||||
**/
|
||||
create() {
|
||||
var result = this._super.apply(this, arguments);
|
||||
const result = this._super.apply(this, arguments);
|
||||
if (result.user) {
|
||||
result.user = AdminUser.create(result.user);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
Finds a list of API keys
|
||||
|
||||
@method find
|
||||
@returns {Promise} a promise that resolves to the array of `ApiKey` instances
|
||||
**/
|
||||
find: function() {
|
||||
return ajax("/admin/api/keys").then(function(keys) {
|
||||
return keys.map(function(key) {
|
||||
return ApiKey.create(key);
|
||||
});
|
||||
});
|
||||
find() {
|
||||
return ajax(KEYS_ENDPOINT).then(keys =>
|
||||
keys.map(key => ApiKey.create(key))
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
Generates a master api key and returns it.
|
||||
|
||||
@method generateMasterKey
|
||||
@returns {Promise} a promise that resolves to a master `ApiKey`
|
||||
**/
|
||||
generateMasterKey: function() {
|
||||
return ajax("/admin/api/key", { type: "POST" }).then(function(result) {
|
||||
return ApiKey.create(result.api_key);
|
||||
});
|
||||
generateMasterKey() {
|
||||
return ajax(KEY_ENDPOINT, { type: "POST" }).then(result =>
|
||||
ApiKey.create(result.api_key)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -1,35 +1,47 @@
|
|||
{{#if model}}
|
||||
<table class='api-keys grid'>
|
||||
<table class="api-keys grid">
|
||||
<thead>
|
||||
<th>{{i18n 'admin.api.key'}}</th>
|
||||
<th>{{i18n 'admin.api.user'}}</th>
|
||||
<th>{{i18n "admin.api.key"}}</th>
|
||||
<th>{{i18n "admin.api.user"}}</th>
|
||||
<th> </th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each model as |k|}}
|
||||
<tr>
|
||||
<td class='key'>{{k.key}}</td>
|
||||
<td class="key">{{k.key}}</td>
|
||||
<td class="key-user">
|
||||
{{#if k.user}}
|
||||
{{#link-to 'adminUser' k.user}}
|
||||
{{#link-to "adminUser" k.user}}
|
||||
{{avatar k.user imageSize="small"}}
|
||||
{{/link-to}}
|
||||
{{else}}
|
||||
{{i18n 'admin.api.all_users'}}
|
||||
{{i18n "admin.api.all_users"}}
|
||||
{{/if}}
|
||||
</td>
|
||||
<td class="key-controls">
|
||||
{{d-button class="btn-default" action=(action "regenerateKey") actionParam=k icon="undo" label='admin.api.regenerate'}}
|
||||
{{d-button class="btn-default" action=(action "revokeKey") actionParam=k icon="times" label='admin.api.revoke'}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "regenerateKey")
|
||||
actionParam=k icon="undo"
|
||||
label="admin.api.regenerate"}}
|
||||
{{d-button
|
||||
class="btn-default"
|
||||
action=(action "revokeKey")
|
||||
actionParam=k
|
||||
icon="times"
|
||||
label="admin.api.revoke"}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
<p>{{i18n 'admin.api.none'}}</p>
|
||||
<p>{{i18n "admin.api.none"}}</p>
|
||||
{{/if}}
|
||||
|
||||
{{#unless hasMasterKey}}
|
||||
<button class='btn btn-icon no-text btn-primary' {{action "generateMasterKey"}}>{{d-icon "key"}}</button>
|
||||
{{d-button
|
||||
class="btn-primary"
|
||||
action=(action "generateMasterKey")
|
||||
icon="key"}}
|
||||
{{/unless}}
|
||||
|
|
Loading…
Reference in New Issue
Block a user