91 lines
2.6 KiB
TypeScript
91 lines
2.6 KiB
TypeScript
import { Button } from "../../../elements/Button";
|
|
import { Component, createRef } from "preact";
|
|
import { DefaultPageProps } from "../../../../types/DefaultPageProps";
|
|
import { ErrorMessage } from "../../../elements/ErrorMessage";
|
|
import { Form } from "../../../elements/Form";
|
|
import { Margin } from "../../../elements/Margin";
|
|
import { MarginInline } from "../../../elements/MarginInline";
|
|
import { SecretTitleElement } from "../SecretTitleElement";
|
|
import { route } from "preact-router";
|
|
import { transitViewSecretURL } from "../../pageLinks";
|
|
import i18next from "i18next";
|
|
|
|
export class TransitNew extends Component<DefaultPageProps> {
|
|
errorMessageRef = createRef<ErrorMessage>();
|
|
|
|
render() {
|
|
const baseMount = this.props.matches["baseMount"];
|
|
|
|
return (
|
|
<>
|
|
<SecretTitleElement
|
|
type="transit"
|
|
baseMount={baseMount}
|
|
suffix={i18next.t("transit_new_key_suffix")}
|
|
/>
|
|
<Form
|
|
onSubmit={async (data) => {
|
|
await this.onSubmit(data);
|
|
}}
|
|
>
|
|
<Margin>
|
|
<input
|
|
class="uk-input uk-form-width-medium"
|
|
name="name"
|
|
placeholder={i18next.t("common_name")}
|
|
type="text"
|
|
required
|
|
/>
|
|
</Margin>
|
|
<Margin>
|
|
<select class="uk-select uk-form-width-medium" name="type">
|
|
{[
|
|
"aes128-gcm96",
|
|
"aes256-gcm96",
|
|
"chacha20-poly1305",
|
|
"ed25519",
|
|
"ecdsa-p256",
|
|
"ecdsa-p384",
|
|
"ecdsa-p521",
|
|
"rsa-2048",
|
|
"rsa-3072",
|
|
"rsa-4096",
|
|
].map((type) => (
|
|
<option label={type} value={type}>
|
|
{type}
|
|
</option>
|
|
))}
|
|
</select>
|
|
</Margin>
|
|
|
|
<Margin>
|
|
<ErrorMessage ref={this.errorMessageRef} />
|
|
</Margin>
|
|
|
|
<MarginInline>
|
|
<Button text={i18next.t("common_create")} color="primary" type="submit" />
|
|
</MarginInline>
|
|
</Form>
|
|
</>
|
|
);
|
|
}
|
|
|
|
async onSubmit(data: FormData): Promise<void> {
|
|
const baseMount = this.props.matches["baseMount"];
|
|
|
|
const name = data.get("name") as string;
|
|
const type = data.get("type") as string;
|
|
|
|
try {
|
|
await this.props.api.newTransitKey(baseMount, {
|
|
name: name,
|
|
type: type,
|
|
});
|
|
route(transitViewSecretURL(baseMount, name));
|
|
} catch (e) {
|
|
const error = e as Error;
|
|
this.errorMessageRef.current.setErrorMessage(error.message);
|
|
}
|
|
}
|
|
}
|