Files
threshold-ui/addons/api/addon/models/session.js
T

101 lines
2.5 KiB
JavaScript
Raw Normal View History

import GeneratedSessionModel from '../generated/models/session';
import { computed } from '@ember/object';
2021-02-05 16:57:06 -05:00
import { equal } from '@ember/object/computed';
2021-06-04 11:31:29 -07:00
import { tracked } from '@glimmer/tracking';
import { A } from '@ember/array';
class SessionCredential {
// =attributes
rawCredential;
credential_library_id;
credential_library_name;
credential_library_description;
credential_library_type;
purpose;
#secret;
get secret() {
return atob(this.#secret);
}
// =methods
constructor(cred) {
this.rawCredential = cred;
this.credential_library_id = cred.credential_library.id;
this.credential_library_name = cred.credential_library.name;
this.credential_library_description = cred.credential_library.description;
this.credential_library_type = cred.credential_library.type;
this.purpose = cred.purpose;
this.#secret = cred.secret;
}
}
2020-09-18 10:16:40 -04:00
export default class SessionModel extends GeneratedSessionModel {
// =attributes
// These transient attributes are used for values that come from the CLI
// `connect` command as triggered by Desktop. These attributes represent
// transient read-only values.
2021-06-04 11:31:29 -07:00
@tracked acknowledged;
@tracked started_desktop_client;
@tracked proxy_address;
@tracked proxy_port;
credentials = A();
2021-02-05 16:57:06 -05:00
@equal('status', 'active') isActive;
@equal('status', 'pending') isPending;
/**
* @type {boolean}
*/
2021-02-05 16:57:06 -05:00
@computed('isActive', 'isPending')
get isCancelable() {
2021-02-05 16:57:06 -05:00
return this.isActive || this.isPending;
}
/**
* The full proxy address and port if address exists, otherwise null.
* @type {?string}
*/
@computed('proxy_address', 'proxy_port')
get proxy() {
return this.proxy_address
? `${this.proxy_address}:${this.proxy_port}`
: null;
}
/**
* The target associated with this session (if loaded).
* @type {TargetModel}
*/
get target() {
return this.store.peekRecord('target', this.target_id);
}
// =methods
addCredential(cred) {
this.credentials.pushObject(new SessionCredential(cred));
}
/**
* Cancels the session via the `cancel` method.
* See serializer and adapter for more information.
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
*/
cancelSession(options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'cancel',
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions,
},
});
}
}