Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'example/exampleUser/ExampleUserProvider.js')
-rw-r--r--example/exampleUser/ExampleUserProvider.js207
1 files changed, 207 insertions, 0 deletions
diff --git a/example/exampleUser/ExampleUserProvider.js b/example/exampleUser/ExampleUserProvider.js
new file mode 100644
index 000000000..8fdd02923
--- /dev/null
+++ b/example/exampleUser/ExampleUserProvider.js
@@ -0,0 +1,207 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+
+import EventEmitter from 'EventEmitter';
+import { v4 as uuid } from 'uuid';
+import createExampleUser from './exampleUserCreator';
+
+const STATUSES = [{
+ key: "NO_STATUS",
+ label: "Not set",
+ iconClass: "icon-question-mark",
+ iconClassPoll: "icon-status-poll-question-mark"
+}, {
+ key: "GO",
+ label: "Go",
+ iconClass: "icon-check",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-ok",
+ statusBgColor: "#33cc33",
+ statusFgColor: "#000"
+}, {
+ key: "MAYBE",
+ label: "Maybe",
+ iconClass: "icon-alert-triangle",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-warning",
+ statusBgColor: "#ffb66c",
+ statusFgColor: "#000"
+}, {
+ key: "NO_GO",
+ label: "No go",
+ iconClass: "icon-circle-slash",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-error",
+ statusBgColor: "#9900cc",
+ statusFgColor: "#fff"
+}];
+/**
+ * @implements {StatusUserProvider}
+ */
+export default class ExampleUserProvider extends EventEmitter {
+ constructor(openmct, {defaultStatusRole} = {defaultStatusRole: undefined}) {
+ super();
+
+ this.openmct = openmct;
+ this.user = undefined;
+ this.loggedIn = false;
+ this.autoLoginUser = undefined;
+ this.status = STATUSES[1];
+ this.pollQuestion = undefined;
+ this.defaultStatusRole = defaultStatusRole;
+
+ this.ExampleUser = createExampleUser(this.openmct.user.User);
+ this.loginPromise = undefined;
+ }
+
+ isLoggedIn() {
+ return this.loggedIn;
+ }
+
+ autoLogin(username) {
+ this.autoLoginUser = username;
+ }
+
+ getCurrentUser() {
+ if (!this.loginPromise) {
+ this.loginPromise = this._login().then(() => this.user);
+ }
+
+ return this.loginPromise;
+ }
+
+ canProvideStatusForRole() {
+ return Promise.resolve(true);
+ }
+
+ canSetPollQuestion() {
+ return Promise.resolve(true);
+ }
+
+ hasRole(roleId) {
+ if (!this.loggedIn) {
+ Promise.resolve(undefined);
+ }
+
+ return Promise.resolve(this.user.getRoles().includes(roleId));
+ }
+
+ getStatusRoleForCurrentUser() {
+ return Promise.resolve(this.defaultStatusRole);
+ }
+
+ getAllStatusRoles() {
+ return Promise.resolve([this.defaultStatusRole]);
+ }
+
+ getStatusForRole(role) {
+ return Promise.resolve(this.status);
+ }
+
+ async getDefaultStatusForRole(role) {
+ const allRoles = await this.getPossibleStatuses();
+
+ return allRoles?.[0];
+ }
+
+ setStatusForRole(role, status) {
+ this.status = status;
+ this.emit('statusChange', {
+ role,
+ status
+ });
+
+ return true;
+ }
+
+ getPollQuestion() {
+ return Promise.resolve({
+ question: 'Set "GO" if your position is ready for a boarding action on the Klingon cruiser',
+ timestamp: Date.now()
+ });
+ }
+
+ setPollQuestion(pollQuestion) {
+ this.pollQuestion = {
+ question: pollQuestion,
+ timestamp: Date.now()
+ };
+ this.emit("pollQuestionChange", this.pollQuestion);
+
+ return true;
+ }
+
+ getPossibleStatuses() {
+ return Promise.resolve(STATUSES);
+ }
+
+ _login() {
+ const id = uuid();
+
+ // for testing purposes, this will skip the form, this wouldn't be used in
+ // a normal authentication process
+ if (this.autoLoginUser) {
+ this.user = new this.ExampleUser(id, this.autoLoginUser, ['example-role']);
+ this.loggedIn = true;
+
+ return Promise.resolve();
+ }
+
+ const formStructure = {
+ title: "Login",
+ sections: [
+ {
+ rows: [
+ {
+ key: "username",
+ control: "textfield",
+ name: "Username",
+ pattern: "\\S+",
+ required: true,
+ cssClass: "l-input-lg",
+ value: ''
+ }
+ ]
+ }
+ ],
+ buttons: {
+ submit: {
+ label: 'Login'
+ }
+ }
+ };
+
+ return this.openmct.forms.showForm(formStructure).then(
+ (info) => {
+ this.user = new this.ExampleUser(id, info.username, ['example-role']);
+ this.loggedIn = true;
+ },
+ () => { // user canceled, setting a default username
+ this.user = new this.ExampleUser(id, 'Pat', ['example-role']);
+ this.loggedIn = true;
+ }
+ );
+ }
+}
+/**
+ * @typedef {import('@/api/user/StatusUserProvider').default} StatusUserProvider
+ */