Implement Transit Decrypt Page.
This commit is contained in:
parent
dc168e5604
commit
3fefdbc90d
19
src/api.js
19
src/api.js
|
@ -296,6 +296,25 @@ export async function transitEncrypt(baseMount, name, data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function transitDecrypt(baseMount, name, data) {
|
||||||
|
const request = new Request(getAPIURL() + removeDoubleSlash(`/v1/${baseMount}/decrypt/${name}`), {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Vault-Token': getToken()
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ciphertext: data})
|
||||||
|
});
|
||||||
|
let response = await fetch(request);
|
||||||
|
if (!response.ok) {
|
||||||
|
let json = await response.json();
|
||||||
|
throw new Error(json.errors[0]);
|
||||||
|
} else {
|
||||||
|
let json = await response.json();
|
||||||
|
return json.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function getTOTPKeys(baseMount) {
|
export async function getTOTPKeys(baseMount) {
|
||||||
const request = new Request(getAPIURL() + `/v1/${baseMount}/keys?list=true`, {
|
const request = new Request(getAPIURL() + `/v1/${baseMount}/keys?list=true`, {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import {
|
||||||
TransitViewPage,
|
TransitViewPage,
|
||||||
TransitViewSecretPage,
|
TransitViewSecretPage,
|
||||||
TransitEncryptPage,
|
TransitEncryptPage,
|
||||||
|
TransitDecryptPage,
|
||||||
KeyValueViewPage,
|
KeyValueViewPage,
|
||||||
KeyValueSecretsPage,
|
KeyValueSecretsPage,
|
||||||
KeyValueVersionsPage,
|
KeyValueVersionsPage,
|
||||||
|
@ -47,6 +48,7 @@ const pages = {
|
||||||
TRANSIT_VIEW: new TransitViewPage(),
|
TRANSIT_VIEW: new TransitViewPage(),
|
||||||
TRANSIT_VIEW_SECRET: new TransitViewSecretPage(),
|
TRANSIT_VIEW_SECRET: new TransitViewSecretPage(),
|
||||||
TRANSIT_ENCRYPT: new TransitEncryptPage(),
|
TRANSIT_ENCRYPT: new TransitEncryptPage(),
|
||||||
|
TRANSIT_DECRYPT: new TransitDecryptPage(),
|
||||||
KEY_VALUE_VIEW: new KeyValueViewPage(),
|
KEY_VALUE_VIEW: new KeyValueViewPage(),
|
||||||
KEY_VALUE_SECRETS: new KeyValueSecretsPage(),
|
KEY_VALUE_SECRETS: new KeyValueSecretsPage(),
|
||||||
KEY_VALUE_VERSIONS: new KeyValueVersionsPage(),
|
KEY_VALUE_VERSIONS: new KeyValueVersionsPage(),
|
||||||
|
|
70
src/pages/TransitDecrypt.js
Normal file
70
src/pages/TransitDecrypt.js
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
import { Page } from "../types/Page.js";
|
||||||
|
import { transitDecrypt } from "../api.js";
|
||||||
|
import { setPageContent, setTitleElement, setErrorText } from "../pageUtils.js";
|
||||||
|
import { makeElement } from "../htmlUtils.js";
|
||||||
|
import { Margin } from "../elements/Margin.js";
|
||||||
|
import { CopyableModal } from "../elements/CopyableModal.js";
|
||||||
|
import UIkit from 'uikit/dist/js/uikit.min.js';
|
||||||
|
|
||||||
|
|
||||||
|
export class TransitDecryptPage extends Page {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
goBack() {
|
||||||
|
changePage(pages.TRANSIT_VIEW_SECRET);
|
||||||
|
}
|
||||||
|
async render() {
|
||||||
|
setTitleElement(pageState);
|
||||||
|
setPageContent(makeElement({
|
||||||
|
tag: "div"
|
||||||
|
}));
|
||||||
|
this.transitDecryptForm = makeElement({
|
||||||
|
tag: "form",
|
||||||
|
children: [
|
||||||
|
Margin(makeElement({
|
||||||
|
tag: "textarea",
|
||||||
|
class: ["uk-textarea", "uk-form-width-medium"],
|
||||||
|
attributes: {
|
||||||
|
placeholder: "Ciphertext",
|
||||||
|
name: "ciphertext",
|
||||||
|
}
|
||||||
|
})),
|
||||||
|
makeElement({
|
||||||
|
tag: "p",
|
||||||
|
id: "errorText",
|
||||||
|
class: "uk-text-danger"
|
||||||
|
}),
|
||||||
|
makeElement({
|
||||||
|
tag: "button",
|
||||||
|
class: ["uk-button", "uk-button-primary"],
|
||||||
|
text: "Decrypt",
|
||||||
|
attributes: {
|
||||||
|
type: "submit",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]
|
||||||
|
});
|
||||||
|
setPageContent(this.transitDecryptForm);
|
||||||
|
this.transitDecryptForm.addEventListener("submit", function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
this.transitEncryptFormHandler();
|
||||||
|
}.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
transitEncryptFormHandler() {
|
||||||
|
let formData = new FormData(this.transitDecryptForm);
|
||||||
|
|
||||||
|
transitDecrypt(pageState.currentBaseMount, pageState.currentSecret, formData.get("ciphertext")).then(res => {
|
||||||
|
let modal = CopyableModal("Decryption Result", res.plaintext);
|
||||||
|
pageContent.appendChild(modal);
|
||||||
|
UIkit.modal(modal).show();
|
||||||
|
}).catch(e => {
|
||||||
|
setErrorText(`API Error: ${e.message}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get name() {
|
||||||
|
return "Transit Decrypt";
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,8 +12,7 @@ export class TransitEncryptPage extends Page {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
goBack() {
|
goBack() {
|
||||||
pageState.currentSecret = "";
|
changePage(pages.TRANSIT_VIEW_SECRET);
|
||||||
changePage(pages.TRANSIT_VIEW);
|
|
||||||
}
|
}
|
||||||
async render() {
|
async render() {
|
||||||
setTitleElement(pageState);
|
setTitleElement(pageState);
|
||||||
|
|
|
@ -6,7 +6,7 @@ export class TransitViewSecretPage extends Page {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
goBack(){
|
goBack() {
|
||||||
changePage(pages.TRANSIT_VIEW);
|
changePage(pages.TRANSIT_VIEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,12 @@ export class TransitViewSecretPage extends Page {
|
||||||
"lock",
|
"lock",
|
||||||
_ => { changePage(pages.TRANSIT_ENCRYPT); }
|
_ => { changePage(pages.TRANSIT_ENCRYPT); }
|
||||||
),
|
),
|
||||||
this.makeTile("Decrypt", "Decrypt some cyphertext.", "mail"),
|
this.makeTile(
|
||||||
|
"Decrypt",
|
||||||
|
"Decrypt some cyphertext.",
|
||||||
|
"mail",
|
||||||
|
_ => { changePage(pages.TRANSIT_DECRYPT); }
|
||||||
|
),
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,4 +13,5 @@ export { KeyValueSecretsEditPage } from "./KeyValueSecretsEdit.js";
|
||||||
export { PwGenPage } from "./PwGen.js";
|
export { PwGenPage } from "./PwGen.js";
|
||||||
export { TransitViewPage } from "./TransitView.js";
|
export { TransitViewPage } from "./TransitView.js";
|
||||||
export { TransitViewSecretPage } from "./TransitViewSecret.js";
|
export { TransitViewSecretPage } from "./TransitViewSecret.js";
|
||||||
export { TransitEncryptPage } from "./TransitEncrypt.js";
|
export { TransitEncryptPage } from "./TransitEncrypt.js";
|
||||||
|
export { TransitDecryptPage } from "./TransitDecrypt.js";
|
|
@ -10,5 +10,9 @@
|
||||||
padding-bottom: 10px !important;
|
padding-bottom: 10px !important;
|
||||||
padding-left: 10px !important;
|
padding-left: 10px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wrap-pre {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
@import "./prism-nord.scss";
|
@import "./prism-nord.scss";
|
||||||
@import "./uikit.scss";
|
@import "./uikit.scss";
|
Loading…
Reference in a new issue