From ac8e25b0ef80e21a2c80c304de3debd206d233d9 Mon Sep 17 00:00:00 2001 From: Chris Hines <chris.hines@monash.edu> Date: Tue, 5 Mar 2019 12:40:43 +1100 Subject: [PATCH] many changes, plust setup git ignore --- .gitignore | 4 + install.sh | 4 +- package-lock.json | 652 ++++++++++-------- src/app/.job.ts.swp | Bin 12288 -> 0 bytes src/app/apiserver.ts | 5 + src/app/authorisation.service.ts | 58 +- src/app/identity.ts | 1 + src/app/joblist/joblist.component.html | 4 +- src/app/launcher/launcher.component.html | 55 +- src/app/launcher/launcher.component.ts | 12 +- .../sv2-side-nav/sv2-side-nav.component.html | 17 +- src/app/tes.service.ts | 47 +- src/assets/config/apiservers.json | 14 + src/assets/config/authservers.json | 9 +- src/assets/config/computesites.json | 10 +- src/assets/config/m3apps.json | 17 +- src/assets/config/m3apps.json~ | 62 -- src/environments/environment.prod.ts | 3 +- src/environments/environment.ts | 3 +- 19 files changed, 587 insertions(+), 390 deletions(-) delete mode 100644 src/app/.job.ts.swp create mode 100644 src/app/apiserver.ts create mode 100644 src/assets/config/apiservers.json delete mode 100644 src/assets/config/m3apps.json~ diff --git a/.gitignore b/.gitignore index eabf65e..2127bb7 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,7 @@ testem.log # System Files .DS_Store Thumbs.db + +*~ +*.swp +*.swo diff --git a/install.sh b/install.sh index 6c7c245..88fc867 100755 --- a/install.sh +++ b/install.sh @@ -1,4 +1,4 @@ -mkdir -p /var/www/sv2/dist/sv2 +mkdir -p /opt/strudel2/spa/sv2 cp sv2.conf /etc/nginx/snippets -cp -r dist/* /var/www/sv2/dist/sv2 +cp -r dist/* /opt/strudel2/spa/sv2 echo "you must include /etc/nginx/snippets/sv2.conf in your nginx site config manually" diff --git a/package-lock.json b/package-lock.json index 41d844d..a07f0ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,17 @@ "requires": { "@angular-devkit/core": "7.3.1", "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + } } }, "@angular-devkit/build-angular": { @@ -67,6 +78,15 @@ "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", @@ -110,6 +130,17 @@ "@angular-devkit/architect": "0.13.1", "@angular-devkit/core": "7.3.1", "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + } } }, "@angular-devkit/core": { @@ -125,6 +156,15 @@ "source-map": "0.7.3" }, "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -133,16 +173,6 @@ } } }, - "@angular-devkit/schematics": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.1.tgz", - "integrity": "sha512-cd7usiasfSgw75INz72/VssrLr9tiVRYfo1TEdvr9ww0GuQbuQpB33xbV8W135eAV8+wzQ3Ce8ohaDHibvj6Yg==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.3.1", - "rxjs": "6.3.3" - } - }, "@angular/animations": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.4.tgz", @@ -152,9 +182,9 @@ } }, "@angular/cdk": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.1.0.tgz", - "integrity": "sha512-dY740pKcIRtKr6n6NomrgqfdEj988urTZ9I/bfJjxF5fdhnSjyhEvDlB55EHsrF+bTTZbZXRmv7AwOQ9GJnD9w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.3.1.tgz", + "integrity": "sha512-m6hy+HPLDgVM+Y2C3UWvIG06euIV8oG5QxrCitZui8JZ/dj/0V5bxATKgWN62haYnYR4en4z1bfH0kOvQj+LEA==", "requires": { "parse5": "5.1.0", "tslib": "1.9.0" @@ -169,30 +199,280 @@ } }, "@angular/cli": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.1.tgz", - "integrity": "sha512-8EvXYRhTqTaTk5PKv7VZxIWJiyG51R9RC9gtpRFx4bbnurqBHdEUxGMmaRsGT8QDbfvVsWnuakE0eeW1CrfZAQ==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.2.4.tgz", + "integrity": "sha512-xv3e0JE4bLZA7GAOBWB9F2Bxq5M9Zw/Agl8Q9mNiPVnYVD3ZeFNfrAat43CxIL1co0W1YEvVzadsCR8kbRmL9A==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.1", - "@angular-devkit/core": "7.3.1", - "@angular-devkit/schematics": "7.3.1", - "@schematics/angular": "7.3.1", - "@schematics/update": "0.13.1", - "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", + "@angular-devkit/architect": "0.12.4", + "@angular-devkit/core": "7.2.4", + "@angular-devkit/schematics": "7.2.4", + "@schematics/angular": "7.2.4", + "@schematics/update": "0.12.4", "inquirer": "6.2.1", - "npm-package-arg": "6.1.0", - "opn": "5.4.0", - "pacote": "9.4.0", - "semver": "5.6.0", + "opn": "5.3.0", + "semver": "5.5.1", "symbol-observable": "1.2.0" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.12.4.tgz", + "integrity": "sha512-19f3jbGyP+GzTSBgrHR4SWGK81SUgtTxhkAcyhmsIEDuXrMJM8kPu0HB9WivJ5p08+jzwz6xdF9mpNYSeD9uqw==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.2.4", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.2.4.tgz", + "integrity": "sha512-XHF59tIHg2qEM1Wd415xhykBLjjfOK6yMB7CjNk1bToUMX2QDT87izJF4y1Vwa0lIw9G0jdgP/4/M/OqXcbYmA==", + "dev": true, + "requires": { + "ajv": "6.6.2", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.2.4.tgz", + "integrity": "sha512-ObIDnIxXRpts+Jzs0PQ7JVuK4d5vWEh9K+Ow8nMO5/LmYJQ8/2nMEQo/9lhdKPMiXmhbuvB7qZL5J+cxwwijhw==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.2.4", + "rxjs": "6.3.3" + } + }, + "@schematics/angular": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.2.4.tgz", + "integrity": "sha512-aflQwIX4E9tDhp6ZASuQCm8CzxLxdkuOe6qN1FbCxpxMUc9E+iK9jhOjw+Xnl3boJpWHAA+k9JO1sYe3wrh3Ng==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.2.4", + "@angular-devkit/schematics": "7.2.4", + "typescript": "3.2.2" + } + }, + "@schematics/update": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.12.4.tgz", + "integrity": "sha512-VJbRGt+WipRdsbFdW40DASIqy8r4o40k2Umv7A0/cjFkq1egyZSC8QAYXhWx3iYn7BSXfGg83hknaAhYCC6Yjw==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.2.4", + "@angular-devkit/schematics": "7.2.4", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.1.1", + "rxjs": "6.3.3", + "semver": "5.5.1", + "semver-intersect": "1.4.0" + } + }, + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "pacote": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.1.1.tgz", + "integrity": "sha512-f28Rq5ozzKAA9YwIKw61/ipwAatUZseYmVssDbHHaexF0wRIVotapVEZPAjOT7Eu3LYVqEp0NVpNizoAnYBUaA==", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "cacache": "11.3.2", + "figgy-pudding": "3.5.1", + "get-stream": "4.1.0", + "glob": "7.1.3", + "lru-cache": "4.1.5", + "make-fetch-happen": "4.0.1", + "minimatch": "3.0.4", + "minipass": "2.3.5", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "normalize-package-data": "2.5.0", + "npm-package-arg": "6.1.0", + "npm-packlist": "1.3.0", + "npm-pick-manifest": "2.2.3", + "npm-registry-fetch": "3.9.0", + "osenv": "0.1.5", + "promise-inflight": "1.0.1", + "promise-retry": "1.1.1", + "protoduck": "5.0.1", + "rimraf": "2.6.3", + "safe-buffer": "5.1.2", + "semver": "5.6.0", + "ssri": "6.0.1", + "tar": "4.4.8", + "unique-filename": "1.1.1", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "typescript": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", + "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true } } @@ -382,7 +662,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -444,7 +724,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -553,9 +833,9 @@ } }, "@angular/flex-layout": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-7.0.0-beta.19.tgz", - "integrity": "sha512-MXq+zZ6/s5/+GsL9fZ42mKL0LjZ/+L0sVU5FaQuSAJ57soLl5QAGWvdxVmROtqcHd3Htp35R49nKSZBJ0nfAjg==", + "version": "7.0.0-beta.23", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-7.0.0-beta.23.tgz", + "integrity": "sha512-jH2i3i/M7SbK6scVlj2urVL5OhzwavbQ7KwvUjyc/UwccKnnzuOuWEGCINLja/aoaUO3I35LluCLv6a6VN0olA==", "requires": { "tslib": "1.9.0" } @@ -583,9 +863,9 @@ "dev": true }, "@angular/material": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.1.0.tgz", - "integrity": "sha512-bgotNpSfGLjNZ1AcTyhs6XS7trF4I7UHwQmfa0l8y3Gf9plwErPDfQe2XqnayRyG9nTwHj9f1lQ45X5mr3/0/A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.3.1.tgz", + "integrity": "sha512-txq2y/JSB+05l8a/OfnByw7AEKSeAWAJ49jzCoeb3804sCeVEbvuWZfpmKBX8vCVTZh005Ypuk55R4NP5AIgaw==", "requires": { "tslib": "1.9.0" } @@ -779,48 +1059,16 @@ "rxjs": "6.3.3", "tree-kill": "1.2.1", "webpack-sources": "1.3.0" - } - }, - "@schematics/angular": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.1.tgz", - "integrity": "sha512-0Ne8APPlTAjKg5CSZqluwCuW/5yPjr3ALCWzqwPxN0suE745usThtasBmqrjw0RMIt8nRqRgtg54Z7lCPO9ZFg==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.3.1", - "@angular-devkit/schematics": "7.3.1", - "typescript": "3.2.4" }, "dependencies": { - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true - } - } - }, - "@schematics/update": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.1.tgz", - "integrity": "sha512-EHOqolT/d/jRGuVTCUESLpk8JNpuaPlsVHfeK7Kdp/t0wSEnmtOelZX4+leS25lGXDaDUF3138ntjrZR4n6bGw==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.3.1", - "@angular-devkit/schematics": "7.3.1", - "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", - "pacote": "9.4.0", - "rxjs": "6.3.3", - "semver": "5.6.0", - "semver-intersect": "1.4.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } } } }, @@ -831,18 +1079,18 @@ "dev": true }, "@types/jasminewd2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.6.tgz", + "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", "dev": true, "requires": { "@types/jasmine": "3.3.8" } }, "@types/node": { - "version": "10.12.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.23.tgz", - "integrity": "sha512-EKhb5NveQ3NlW5EV7B0VRtDKwUfVey8LuJRl9pp5iW0se87/ZqLjG0PMf2MCzPXAJYWZN5Ltg7pHIAf9/Dm1tQ==", + "version": "10.12.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.24.tgz", + "integrity": "sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ==", "dev": true }, "@types/q": { @@ -869,7 +1117,7 @@ "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", "dev": true, "requires": { - "@types/node": "10.12.23", + "@types/node": "10.12.24", "@types/source-list-map": "0.1.2", "source-map": "0.6.1" }, @@ -1215,9 +1463,9 @@ } }, "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", + "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", "dev": true }, "append-transform": { @@ -1530,7 +1778,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.5", + "core-js": "2.6.4", "regenerator-runtime": "0.11.1" } }, @@ -2777,17 +3025,25 @@ "dev": true }, "codelyzer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.2.1.tgz", - "integrity": "sha512-CKwfgpfkqi9dyzy4s6ELaxJ54QgJ6A8iTSsM4bzHbLuTpbKncvNc3DUlCvpnkHBhK47gEf4qFsWoYqLrJPhy6g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", + "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", "dev": true, "requires": { - "app-root-path": "2.0.1", - "css-selector-tokenizer": "0.7.0", + "app-root-path": "2.1.0", + "css-selector-tokenizer": "0.7.1", "cssauron": "1.4.0", "semver-dsl": "1.0.1", "source-map": "0.5.7", - "sprintf-js": "1.0.3" + "sprintf-js": "1.1.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } } }, "collection-visit": { @@ -3049,9 +3305,9 @@ } }, "core-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", - "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", + "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==" }, "core-util-is": { "version": "1.0.2", @@ -3157,13 +3413,13 @@ "dev": true }, "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { "cssesc": "0.1.0", - "fastparse": "1.1.1", + "fastparse": "1.1.2", "regexpu-core": "1.0.0" } }, @@ -4127,9 +4383,9 @@ "dev": true }, "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "faye-websocket": { @@ -5967,7 +6223,7 @@ "lodash": "4.17.11", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rxjs": "6.3.3", + "rxjs": "6.4.0", "string-width": "2.1.1", "strip-ansi": "5.0.0", "through": "2.3.8" @@ -6736,7 +6992,7 @@ "colors": "1.1.2", "combine-lists": "1.0.1", "connect": "3.6.6", - "core-js": "2.5.5", + "core-js": "2.6.4", "di": "0.0.1", "dom-serialize": "2.2.1", "expand-braces": "0.1.2", @@ -8092,156 +8348,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "pacote": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz", - "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "cacache": "11.3.2", - "figgy-pudding": "3.5.1", - "get-stream": "4.1.0", - "glob": "7.1.3", - "lru-cache": "5.1.1", - "make-fetch-happen": "4.0.1", - "minimatch": "3.0.4", - "minipass": "2.3.5", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "normalize-package-data": "2.5.0", - "npm-package-arg": "6.1.0", - "npm-packlist": "1.3.0", - "npm-pick-manifest": "2.2.3", - "npm-registry-fetch": "3.9.0", - "osenv": "0.1.5", - "promise-inflight": "1.0.1", - "promise-retry": "1.1.1", - "protoduck": "5.0.1", - "rimraf": "2.6.3", - "safe-buffer": "5.1.2", - "semver": "5.6.0", - "ssri": "6.0.1", - "tar": "4.4.8", - "unique-filename": "1.1.1", - "which": "1.3.1" - }, - "dependencies": { - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "3.0.3" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "3.5.1" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } - } - }, "pako": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", @@ -9005,9 +9111,9 @@ "dev": true }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, "regenerator-runtime": { @@ -9041,7 +9147,7 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.3.3", + "regenerate": "1.4.0", "regjsgen": "0.2.0", "regjsparser": "0.1.5" } @@ -9244,17 +9350,17 @@ } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "1.9.0" } }, "rxjs-compat": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.2.0.tgz", - "integrity": "sha512-kFX7NSIgyzqn3+J5F/w75R72wDOICXwArbXyPU1neE4laOEwxkMTm+2oAZXN82yb+yli+j+c5USgbGLfphTCTA==" + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.4.0.tgz", + "integrity": "sha512-eo/O8RS83hJdJukCtA+IF6qnqa8FPOuVo+OPCzgVi+dbTle9KCdNv97IcQO0WwNVik7DJLKmf0F8uwzc0q40vw==" }, "safe-buffer": { "version": "5.1.2", @@ -10760,9 +10866,9 @@ "dev": true }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", "dev": true }, "uglify-js": { @@ -11722,9 +11828,9 @@ "dev": true }, "zone.js": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", - "integrity": "sha512-W9Nj+UmBJG251wkCacIkETgra4QgBo/vgoEkb4a2uoLzpQG7qF9nzwoLXWU5xj3Fg2mxGvEDh47mg24vXccYjA==" + "version": "0.8.29", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", + "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" } } } diff --git a/src/app/.job.ts.swp b/src/app/.job.ts.swp deleted file mode 100644 index 06708e136886eebf98fa2da91c3168aa23a1e71e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI%!AiqG5P;#S;87GkdRgn)rq)YopFqK5J$OqttBtft%x*;x^*KC>&*2kz@a7|U ztG<HUHiB3wy+;0pVc5)&&3uqUNYp$zJXY;SQ~cTx`FwakeXW1U%eIK_C#kWM!s0ay zZGUmcta>-QVW6|v1oo;G*g^+ko(C6M)No52w9Fy&Ab`NUz{s8LwbyzFt^Mh%zFXf> zTbsT4KCU2u00IagfB*srAb`NX6>xb??)`Kt<%FwcuKmj8mV^KT2q1s}0tg_000Iag zfB*s&6bNIH%XN`QACv$8-{1dZzkl=b?BmJDv|hpacw__+KmY**5I_I{1Q0*~0R$=` za4X8Md=w25t*i^3>G)J6>3R2OB{o+7SxDlJN=L)U6kRdbc~&^32cfm<D2vpMd;vkd BK~w+$ diff --git a/src/app/apiserver.ts b/src/app/apiserver.ts new file mode 100644 index 0000000..6dec701 --- /dev/null +++ b/src/app/apiserver.ts @@ -0,0 +1,5 @@ +export class APIServer { + name: string; + tes: string; + tws: string +} diff --git a/src/app/authorisation.service.ts b/src/app/authorisation.service.ts index 321db36..0eeda95 100644 --- a/src/app/authorisation.service.ts +++ b/src/app/authorisation.service.ts @@ -25,7 +25,9 @@ export class SshauthzServer {} export class AuthorisationService { // public token: BehaviorSubject<AuthToken>; public token: AuthToken - public SshAuthzServers: BehaviorSubject<SshAuthzServer[]>; + public sshAuthzServers: BehaviorSubject<SshAuthzServer[]>; + public loggedInAuthZ: BehaviorSubject<SshAuthzServer[]>; + public loggedOutAuthZ: BehaviorSubject<SshAuthzServer[]>; public readyToNavigate: Subject<[Boolean,string]>; public progress: Subject<string>; // private keyCert: Subject<KeyCert>; @@ -48,12 +50,16 @@ export class AuthorisationService { this.progress.next(""); // this.token.subscribe(token => this.getCert(token)); this.route.fragment.subscribe(frag => this.storeToken(frag)); - this.SshAuthzServers = new BehaviorSubject<SshAuthzServer[]>([]); + this.sshAuthzServers = new BehaviorSubject<SshAuthzServer[]>([]); + this.loggedInAuthZ = new BehaviorSubject<SshAuthzServer[]>([]); + this.loggedOutAuthZ = new BehaviorSubject<SshAuthzServer[]>([]); this.backendURI = environment.tesurl; - this.agentContents = new BehaviorSubject(null); + this.agentContents = new BehaviorSubject([]); this.keys = []; this.getSshAuthzServers(); this.keys = []; + this.agentContents.subscribe((value) => this.updateLoggedAuthZ()); + this.sshAuthzServers.subscribe((value) => this.updateLoggedAuthZ()); } public setStatusMsg(statusMsg: BehaviorSubject<any>) { @@ -68,9 +74,48 @@ export class AuthorisationService { .subscribe(resp => this.updateSshAuthzServers(resp)); } + private updateLoggedAuthZ() { + let agentContents = this.agentContents.value + let authzServers = this.sshAuthzServers.value + let loggedin = [] + let loggedout = [] + var found: boolean; + for (let s of authzServers) { + found=false; + console.log('server fp',s.cafp) + for (let cert of agentContents) { + console.log('cert',cert); + if ('Signing CA' in cert) { + for (let ca of cert['Signing CA']) { + console.log('ca',ca); + if (ca == s.cafp) { + loggedin.push(s) + found=true; + continue; + } + } + } + if (found) { + continue; + } + } + if (!found) { + loggedout.push(s) + } + } + console.log('updating which authz servers are logged in and out'); + console.log('logged in'); + console.log(loggedin); + console.log('logged out'); + console.log(loggedout); + this.loggedOutAuthZ.next(loggedout); + this.loggedInAuthZ.next(loggedin); + } + + updateSshAuthzServers(resp) { - this.SshAuthzServers.next(<SshAuthzServer[]>resp); - console.log('sshauthzservers set to',this.SshAuthzServers.value); + this.sshAuthzServers.next(<SshAuthzServer[]>resp); + console.log('sshauthzservers set to',this.sshAuthzServers.value); } storeToken(frag: string) { @@ -191,6 +236,7 @@ public getKeys(id?: Identity) { // error => this.httperror(error)) } + private killAgent() { this.statusMsg.next("Logging out") let headers = new HttpHeaders(); @@ -228,7 +274,7 @@ public getKeys(id?: Identity) { public login(authservice: SshAuthzServer) { let redirect_uri = window.location.origin+this.locationStrategy.getBaseHref()+"sshauthz_callback"; - let nonce="asdfzxcv"; + let nonce=Math.random().toString(36).substring(2, 15) console.log(this.location.path()); diff --git a/src/app/identity.ts b/src/app/identity.ts index 4247872..217695f 100644 --- a/src/app/identity.ts +++ b/src/app/identity.ts @@ -56,4 +56,5 @@ export class SshAuthzServer { scope: string; logout: string; userdefined: boolean; + cafp: string; } diff --git a/src/app/joblist/joblist.component.html b/src/app/joblist/joblist.component.html index aaa183c..a86885a 100644 --- a/src/app/joblist/joblist.component.html +++ b/src/app/joblist/joblist.component.html @@ -9,10 +9,12 @@ Select your username an compute site on the left to see running jobs or start new jobs. </div> <div *ngIf="!(identity == undefined)"> - <button mat-button (click)="refreshJobs()" style="width: 100%; text-align: left">Refresh</button> + Jobs running as {{ identity.displayName() }} <div *ngFor="let job of tesService.joblist | async"> <app-job [jobdata]=job></app-job> </div> + <button mat-button (click)="refreshJobs()" style="width: 100%; text-align: right">Refresh Job list</button> + </div> </mat-card> diff --git a/src/app/launcher/launcher.component.html b/src/app/launcher/launcher.component.html index 642b748..1e6dfdc 100644 --- a/src/app/launcher/launcher.component.html +++ b/src/app/launcher/launcher.component.html @@ -1,3 +1,5 @@ + + <div fxFlex style="flex: 1 1 0%; box-sizing: border-box"> <div fxLayout="column" fxLayoutAlign="space-around stretch" style="height: 100%; width: 100%" > <mat-toolbar color="primary"> @@ -11,25 +13,42 @@ <mat-sidenav-container autosize autosize style="height: 100%; width: 100%"> <mat-sidenav #idSideNav mode="side" opened> <mat-accordion> - <app-sv2-side-nav></app-sv2-side-nav> - </mat-accordion> - <mat-divider></mat-divider> - <mat-accordion> - <div *ngFor="let id of computeSitesService.appidentities | async"> - <mat-expansion-panel (click)=selectId(id)> - <mat-expansion-panel-header> - {{ id.displayName() }} - </mat-expansion-panel-header> - <!-- <div *ngFor="let app of id.site.appCatalog.value"> - <div *ngIf="app.startscript != null"> - <button mat-button (click)=openLaunchWindow(app,id)>{{ app.name }}</button> - </div> - </div> --> - <app-strudelapplist [applist]=id.site.appCatalog [identity]="id"></app-strudelapplist> - </mat-expansion-panel> - </div> + +<!-- <mat-accordion> --> + <mat-expansion-panel> + <mat-expansion-panel-header> + <mat-panel-title> + More Services + </mat-panel-title> + </mat-expansion-panel-header> + <div *ngFor="let sshauthzserver of (authService.loggedOutAuthZ | async)" style="width: 100%"> + <button mat-button (click)=login(sshauthzserver) fxFlex style="text-align: left"> Run on {{ sshauthzserver.name }}</button> + <button mat-icon-button *ngIf="sshauthzserver.userdefined === true"><mat-icon>remove</mat-icon></button> + </div> + <button mat-button (click) =logout() style="width: 100%; text-align: left">Logout</button> + <button mat-button (click) ="authService.updateAgentContents()" style="width: 100%; text-align: left">Refresh Services</button> + </mat-expansion-panel> + <div *ngFor="let id of computeSitesService.appidentities | async"> + <mat-expansion-panel (click)=selectId(id)> + <mat-expansion-panel-header> + {{ id.displayName() }} + </mat-expansion-panel-header> + <app-strudelapplist [applist]=id.site.appCatalog [identity]="id"></app-strudelapplist> + </mat-expansion-panel> + </div> + <mat-expansion-panel> + <mat-expansion-panel-header> + Advanced Options + </mat-expansion-panel-header> + Select an API server + <mat-select (selectionChange)="tesService.apiserver.next($event.value)" [value]="tesService.apiserver|async"> + <mat-option *ngFor="let apis of tesService.apiservers|async" [value]="apis"> + {{ apis.name }} + </mat-option> + </mat-select> + </mat-expansion-panel> </mat-accordion> - </mat-sidenav> +</mat-sidenav> <app-joblist [identity]="identitySubject | async"></app-joblist> <div fxFlex></div> diff --git a/src/app/launcher/launcher.component.ts b/src/app/launcher/launcher.component.ts index dc8d65a..162665e 100644 --- a/src/app/launcher/launcher.component.ts +++ b/src/app/launcher/launcher.component.ts @@ -47,7 +47,7 @@ export class LauncherComponent implements OnInit { private authService: AuthorisationService, public computeSitesService: ComputesitesService, ) { - this.authService.SshAuthzServers.subscribe(o => {this.sshauthzservers = o}); + this.authService.sshAuthzServers.subscribe(o => {this.sshauthzservers = o}); this.identitySubject = new BehaviorSubject(undefined); } @@ -68,6 +68,16 @@ export class LauncherComponent implements OnInit { //} + logout() { + let dialogRef = this.dialog.open(LogoutdialogComponent, { + width: '250px', + height: '400px', + }); + } + + login (sshauthzserver) { + this.authService.login(sshauthzserver); + } selectId(id: Identity) { diff --git a/src/app/sv2-side-nav/sv2-side-nav.component.html b/src/app/sv2-side-nav/sv2-side-nav.component.html index 216506d..8bf1634 100644 --- a/src/app/sv2-side-nav/sv2-side-nav.component.html +++ b/src/app/sv2-side-nav/sv2-side-nav.component.html @@ -2,15 +2,18 @@ <mat-expansion-panel> <mat-expansion-panel-header> <mat-panel-title> - Login + More Services </mat-panel-title> </mat-expansion-panel-header> - <div *ngFor="let sshauthzserver of (authService.SshAuthzServers | async)"> - <div style="width: 100%"> - <button mat-button (click)=login(sshauthzserver) fxFlex style="text-align: left">Login to {{ sshauthzserver.name }} </button> - <button mat-icon-button *ngIf="sshauthzserver.userdefined === true"><mat-icon>remove</mat-icon></button> - </div> + <div *ngFor="let sshauthzserver of (authService.loggedInAuthZ | async)" style="width: 100%"> + <button mat-button (click) =logout()>Logout {{ sshauthzserver.name }}</button> + </div> + <div *ngFor="let sshauthzserver of (authService.loggedOutAuthZ | async)" style="width: 100%"> + <button mat-button (click)=login(sshauthzserver) fxFlex style="text-align: left"> Run on {{ sshauthzserver.name }}</button> + <button mat-icon-button *ngIf="sshauthzserver.userdefined === true"><mat-icon>remove</mat-icon></button> + </div> + <div style="width: 100%"> + <button mat-button (click) ="authService.updateAgentContents()"> Refresh </button> </div> - <button mat-button (click)=logout() style="width: 100%; text-align: left" >Logout</button> </mat-expansion-panel> <!-- </mat-accordion> --> diff --git a/src/app/tes.service.ts b/src/app/tes.service.ts index dbadf09..08db0e0 100644 --- a/src/app/tes.service.ts +++ b/src/app/tes.service.ts @@ -9,9 +9,10 @@ import {BehaviorSubject} from 'rxjs/BehaviorSubject'; import { Subject } from 'rxjs/Subject'; import { Strudelapp, StrudelappInstance } from './strudelapp'; import { Computesite } from './computesite'; +import { APIServer } from './apiserver'; import { Identity, AuthToken, KeyCert, SshAuthzServer } from './identity'; -import { BatchInterface} from './batchinterface'; -import {ComputesitesService} from './computesites.service'; +import { BatchInterface } from './batchinterface'; +import { ComputesitesService } from './computesites.service'; import { StrudelappsService } from './strudelapps.service'; import { timer } from 'rxjs/observable/timer'; import { repeat } from 'rxjs/operators'; @@ -32,6 +33,7 @@ Its also responsible for querying a compute site for running jobs */ }) export class TesService { public Base=environment.tesurl; +public twsproxy = environment.twsurl; // public Base='http://localhost:5000'; public statusMsg: BehaviorSubject<any>; public jobs: any[]; @@ -42,6 +44,8 @@ public joblist: BehaviorSubject<Job[]>; private timerSubscription: any; private appwindow: any; private appwindowWatcher: any; +public apiserver: BehaviorSubject<APIServer>; +public apiservers: BehaviorSubject<APIServer[]>; // public batchinterface: {[id: string] : BatchInterface}; constructor(private http: HttpClient, @@ -54,9 +58,13 @@ private appwindowWatcher: any; this.busy = new BehaviorSubject<boolean>(false); // this.joblist = new BehaviorSubject<{[id: string]: Job[]}>({}); this.joblist = new BehaviorSubject<Job[]>([]); + this.apiserver = new BehaviorSubject<APIServer>(undefined); + this.apiservers = new BehaviorSubject<APIServer[]>([]); + this.apiserver.subscribe((r)=>this.logApiServerChange(r)); this.timerSubscription = null; this.appwindowWatcher = null; + this.getAPIServers(); // this.batchinterface = {}; // this.computesitesService.identities.subscribe(identities => this.startPolling(identities)); } @@ -65,6 +73,29 @@ public setStatusMsg(statusMsg: BehaviorSubject<any>) { this.statusMsg = statusMsg; } +private logApiServerChange(r) { + console.log('api server was updated'); + console.log(this.apiserver.value); +} + + setApiServer(server: APIServer) { + console.log('calling setAPIServer'); + this.apiserver.next(server); + } + + getAPIServers() { + let headers = new HttpHeaders(); + let options = { headers: headers, withCredentials: false}; + this.http.get<SshAuthzServer[]>('./assets/config/apiservers.json',options) + .subscribe(resp => this.updateAPIServers(resp)); + } + + private updateAPIServers(resp) { + this.apiservers.next(<APIServer[]>resp); + this.apiserver.next(this.apiservers.value[0]); + } + + private buildParams(app: Strudelapp, identity: Identity, batchinterface: BatchInterface, appinst?: any): string { let params = new URLSearchParams(); let id = identity.copy_skip_catalog(); @@ -166,8 +197,8 @@ public setStatusMsg(statusMsg: BehaviorSubject<any>) { let body = {'app': app, 'appparams': appparams, 'keys': keys} console.log('tes is submitting the job with body',body); this.http.post<any>(this.Base+'/submit'+'?'+paramstr, body, options) - // .pipe(catchError(this.handleError)) - .subscribe(resp => { + .pipe(catchError(this.handleError)) + .subscribe(resp => { this.busy.next(false); this.statusMsg.next(null) }, @@ -255,8 +286,10 @@ public setStatusMsg(statusMsg: BehaviorSubject<any>) { this.getAppInstance(job); } - public openAppWindow(url: string) { - let windowloc = url; + public openAppWindow(url: any) { + console.log('in open window url is',url,this.twsproxy); + let windowloc = url.replace(/\{twsproxy\}/g,this.twsproxy); + console.log('window loc is ',windowloc); // let windowloc = this.router.config this.appwindow = window.open(windowloc); if (!(this.appwindowWatcher === null)) { @@ -342,6 +375,8 @@ private httperror(errorstr: string) { private handleError(error: HttpErrorResponse) { + console.error('in handleError'); + console.error(error); if (error.error instanceof ErrorEvent) { // A client-side or network error occurred. Handle it accordingly. return throwError("Hmm, that didn't work. If you're using a local connection, please make sure Strudel-TES is running."); diff --git a/src/assets/config/apiservers.json b/src/assets/config/apiservers.json new file mode 100644 index 0000000..96cdeba --- /dev/null +++ b/src/assets/config/apiservers.json @@ -0,0 +1,14 @@ +[ + { + "name": "Testing", + "tes": "https://strudel2-test.cloud.cvl.org.au/tes", + "tws": "https://strudel2-test.cloud.cvl.org.au" + }, + { + "name": "Dev", + "tes": "https://vm-118-138-240-255.erc.monash.edu.au/tes", + "tws": "https://vm-118-138-240-255.erc.monash.edu.au/" + } +] + + diff --git a/src/assets/config/authservers.json b/src/assets/config/authservers.json index 376edea..e2d26fa 100644 --- a/src/assets/config/authservers.json +++ b/src/assets/config/authservers.json @@ -8,7 +8,8 @@ "logout": "https://sshauthz.cloud.cvl.org.au/pysshauthz/oauth2/logout", "name": "M3 via AAF Central", "icon": null, - "scope": "user:email" + "scope": "user:email", + "cafp": "RSA SHA256:cmDxHrZQSPlBMUUcI/BWmruXho1XOzfXPDHSqVTwV2I" }, { "authorise": "https://sshauthz.cloud.cvl.org.au/pysshauthz/oauth2/oauth/authorize/google", @@ -18,7 +19,8 @@ "logout": "https://sshauthz.cloud.cvl.org.au/pysshauthz/oauth2/logout", "name": "M3 via Google", "icon": null, - "scope": "user:email" + "scope": "user:email", + "cafp": "RSA SHA256:cmDxHrZQSPlBMUUcI/BWmruXho1XOzfXPDHSqVTwV2I" }, { "authorise": "https://sshauthz.cloud.cvl.org.au/pysshauthz/oauth2/oauth/authorize/aafcentral", @@ -28,7 +30,8 @@ "logout": "https://sshauthz.cloud.cvl.org.au/pysshauthz/oauth2/logout", "name": "OzStar via AAF Central", "icon": null, - "scope": "user:email" + "scope": "user:email", + "cafp": "RSA SHA256:uRYwTJSLksZbwSXYYmOjXh6JzSXpwVnY6o7BYFJc60g" } ] diff --git a/src/assets/config/computesites.json b/src/assets/config/computesites.json index 9e1c469..1d472d6 100644 --- a/src/assets/config/computesites.json +++ b/src/assets/config/computesites.json @@ -1,17 +1,17 @@ [ { - "url": "http://localhost:5200/", + "url": "https://vm-118-138-240-255.erc.monash.edu.au/sbatch/", "name": "M3", "host": "m3-login2.massive.org.au", "dtn": "m3-dtn1.massive.org.au", "cafingerprint": "RSA SHA256:cmDxHrZQSPlBMUUcI/BWmruXho1XOzfXPDHSqVTwV2I", "appCatalog": [], "appCatalogUri": "./assets/config/m3apps.json", - "cancelcmd": "scancel {jobid}", - "statcmd": "/usr/local/sv2/sv2stat.py" + "cancelcmd": "/usr/local/sv2/sv2scancel.sh {jobid}", + "statcmd": "/home/chines/sv2stat.py" }, { - "url": "https://vm-118-138-240-255.erc.monash.edu.au/m3siteconfig/", + "url": "https://vm-118-138-240-255.erc.monash.edu.au/sbatch/", "name": "OzStar", "host": "ozstar.swin.edu.au", "dtn": "ozstar.swin.edu.au", @@ -22,7 +22,7 @@ "statcmd": "/usr/local/sv2/sv2stat.py" }, { - "url": "https://vm-118-138-240-255.erc.monash.edu.au/m3siteconfig_dev/", + "url": "https://vm-118-138-240-255.erc.monash.edu.au/m3siteconfig/", "name": "CVL@UWA", "host": "146.118.65.246", "dtn": "146.118.65.246", diff --git a/src/assets/config/m3apps.json b/src/assets/config/m3apps.json index 0f36950..9b2dc43 100644 --- a/src/assets/config/m3apps.json +++ b/src/assets/config/m3apps.json @@ -1,9 +1,9 @@ [ { "url": null, "name": "Desktop", - "startscript": "#!/bin/bash\n/home/chines/sv2/desktop_novnc/desktop.sh\n ", - "paramscmd": "/home/chines/sv2/desktop_novnc/params.py", - "client": {"cmd": null, "redir": "vnc.html?host=vm-118-138-240-255.erc.monash.edu.au&port=443&password={password}" }, + "startscript": "#!/bin/bash\n/usr/local/sv2/desktop/desktop.slurm\n ", + "paramscmd": "/usr/local/sv2/desktop/params.py", + "client": {"cmd": null, "redir": "vnc.html?password={password}" }, "localbind": true, "applist": null }, @@ -19,9 +19,18 @@ { "url": "transfer", "name": "Transfer files", "startscript": "#!/bin/bash\n echo '{appparams}' | /usr/local/sv2/copytool.py\n", - "paramscmd": "/home/chines/sv2/desktop_novnc/params.py", + "paramscmd": "/usr/local/sv2/desktop/params.py", "client": {"cmd": null, "redir": null }, "localbind": true, "applist": null + }, + { + "url": null, + "name": "CryoSPARC", + "startscript": null, + "paramscmd": "/home/chines/cryosparc_params.py", + "client": {"cmd": null, "redir": ""}, + "localbind": true, + "applist": null } ] diff --git a/src/assets/config/m3apps.json~ b/src/assets/config/m3apps.json~ deleted file mode 100644 index f15ba47..0000000 --- a/src/assets/config/m3apps.json~ +++ /dev/null @@ -1,62 +0,0 @@ -[ - { "url": null, - "name": "Desktop", - "startscript": "#!/bin/bash\n/home/chines/sv2/desktop_novnc/desktop.sh\n ", - "paramscmd": "/home/chines/sv2/desktop_novnc/params.py", - "client": {"cmd": null, "redir": "vnc.html?host=vm-118-138-240-255.erc.monash.edu.au&port=443&password={password}" }, - "localbind": true, - "applist": null - }, - { "url": null, - "name": "Guacamole Desktop", - "startscript": "#!/bin/bash\n/home/chines/desktop.sh\n ", - "paramscmd": "/home/chines/vdiparam.py", - "client": {"cmd": null, "redir": "guacamole?username={username}&password={password}" }, - "localbind": true, - "applist": null - }, - { - "url": null, - "name": "Jupyter Lab", - "startscript": "#!/bin/bash\n/home/chines/jupyter.slurm\n", - "paramscmd": "/home/chines/jupyter_params.py", - "client": {"cmd": null, "redir": "?token={token}"}, - "localbind": true, - "applist": null - }, - { - "url": null, - "name": "LiberTEM", - "startscript": "eval $(cat /home/chines/libertembatch)", - "paramscmd": "/projects/pMOSP/chines/libertem_venv/bin/python /projects/pMOSP/chines/libertem_venv/bin/server_stat.py", - "client": {"cmd": null, "redir": ""}, - "localbind": true, - "applist": null - }, - { - "url": null, - "name": "CryoSPARC", - "startscript": null, - "paramscmd": "/home/chines/cryosparc_params.py", - "client": {"cmd": null, "redir": ""}, - "localbind": true, - "applist": null - }, - { - "url": null, - "name": "R Studio Server", - "startscript": "#!/bin/bash\n/usr/local/sv2/rstudioserver/run.sh\n", - "paramscmd": "/usr/local/sv2/rstudioserver/params.py", - "client": {"cmd": null, "redir": ""}, - "localbind": true, - "applist": null - }, - { "url": "transfer", - "name": "Transfer files", - "startscript": "#!/bin/bash\n echo '{appparams}' | /usr/local/sv2/copytool.py\n", - "paramscmd": "/home/chines/sv2/desktop_novnc/params.py", - "client": {"cmd": null, "redir": null }, - "localbind": true, - "applist": null - } -] diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 358d47b..56357e8 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,5 +1,6 @@ export const environment = { production: true, - tesurl: "https://vm-118-138-240-255.erc.monash.edu.au/tes" + tesurl: "https://vm-118-138-240-255.erc.monash.edu.au/tes", + twsurl: "https://vm-118-138-240-255.erc.monash.edu.au/" }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 39a4192..998149d 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -5,5 +5,6 @@ export const environment = { production: false, - tesurl: "http://localhost:5000" + tesurl: "https://strudel2-test.cloud.cvl.org.au/tes", + twsurl: "https://strudel2-test.cloud.cvl.org.au" }; -- GitLab