web: use generated API Client (#616)
* api: fix types for config API * api: remove broken swagger UI * admin: re-fix system task enum * events: make event optional * events: fix Schema for notification transport test * flows: use APIView for Flow Executor * core: fix schema for Metrics APIs * web: rewrite to use generated API client * web: generate API Client in CI * admin: use x_cord and y_cord to prevent yaml issues * events: fix linting errors * web: don't lint generated code * core: fix fields not being required in TypeSerializer * flows: fix missing permission_classes * web: cleanup * web: fix rendering of graph on Overview page * web: cleanup imports * core: fix missing background image filter * flows: fix flows not advancing properly * stages/*: fix warnings during get_challenge * web: send Flow response as JSON instead of FormData * web: fix styles for horizontal tabs * web: add base chart class and custom chart for application view * root: generate ts client for e2e tests * web: don't attempt to connect to websocket in selenium tests * web: fix UserTokenList not being included in the build * web: fix styling for static token list * web: fix CSRF Token missing * stages/authenticator_static: fix error when disable static tokens * core: fix display issue when updating user info * web: fix Flow executor not showing spinner when redirecting
This commit is contained in:
4
web/src/api/.gitignore
vendored
Normal file
4
web/src/api/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
apis/**
|
||||
models/**
|
||||
index.ts
|
||||
runtime.ts
|
||||
23
web/src/api/.openapi-generator-ignore
Normal file
23
web/src/api/.openapi-generator-ignore
Normal file
@ -0,0 +1,23 @@
|
||||
# OpenAPI Generator Ignore
|
||||
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||
|
||||
# Use this file to prevent files from being overwritten by the generator.
|
||||
# The patterns follow closely to .gitignore or .dockerignore.
|
||||
|
||||
# As an example, the C# client generator defines ApiClient.cs.
|
||||
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||
#ApiClient.cs
|
||||
|
||||
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||
#foo/*/qux
|
||||
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||
|
||||
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||
#foo/**/qux
|
||||
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||
|
||||
# You can also negate patterns with an exclamation (!).
|
||||
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||
#docs/*.md
|
||||
# Then explicitly reverse the ignore rule for a single file:
|
||||
#!docs/README.md
|
||||
167
web/src/api/.openapi-generator/FILES
Normal file
167
web/src/api/.openapi-generator/FILES
Normal file
@ -0,0 +1,167 @@
|
||||
apis/AdminApi.ts
|
||||
apis/CoreApi.ts
|
||||
apis/CryptoApi.ts
|
||||
apis/EventsApi.ts
|
||||
apis/FlowsApi.ts
|
||||
apis/OutpostsApi.ts
|
||||
apis/PoliciesApi.ts
|
||||
apis/PropertymappingsApi.ts
|
||||
apis/ProvidersApi.ts
|
||||
apis/RootApi.ts
|
||||
apis/SourcesApi.ts
|
||||
apis/StagesApi.ts
|
||||
apis/index.ts
|
||||
index.ts
|
||||
models/Application.ts
|
||||
models/AuthenticateWebAuthnStage.ts
|
||||
models/AuthenticatorStaticStage.ts
|
||||
models/AuthenticatorTOTPStage.ts
|
||||
models/AuthenticatorValidateStage.ts
|
||||
models/Cache.ts
|
||||
models/CaptchaStage.ts
|
||||
models/CertificateData.ts
|
||||
models/CertificateKeyPair.ts
|
||||
models/Challenge.ts
|
||||
models/Config.ts
|
||||
models/ConsentStage.ts
|
||||
models/Coordinate.ts
|
||||
models/DenyStage.ts
|
||||
models/DockerServiceConnection.ts
|
||||
models/DummyPolicy.ts
|
||||
models/DummyStage.ts
|
||||
models/EmailStage.ts
|
||||
models/ErrorDetail.ts
|
||||
models/Event.ts
|
||||
models/EventMatcherPolicy.ts
|
||||
models/EventTopPerUser.ts
|
||||
models/ExpressionPolicy.ts
|
||||
models/Flow.ts
|
||||
models/FlowDiagram.ts
|
||||
models/FlowStageBinding.ts
|
||||
models/Group.ts
|
||||
models/GroupMembershipPolicy.ts
|
||||
models/HaveIBeenPwendPolicy.ts
|
||||
models/IPReputation.ts
|
||||
models/IdentificationStage.ts
|
||||
models/InlineResponse200.ts
|
||||
models/InlineResponse2001.ts
|
||||
models/InlineResponse20010.ts
|
||||
models/InlineResponse20011.ts
|
||||
models/InlineResponse20012.ts
|
||||
models/InlineResponse20013.ts
|
||||
models/InlineResponse20014.ts
|
||||
models/InlineResponse20015.ts
|
||||
models/InlineResponse20016.ts
|
||||
models/InlineResponse20017.ts
|
||||
models/InlineResponse20018.ts
|
||||
models/InlineResponse20019.ts
|
||||
models/InlineResponse2002.ts
|
||||
models/InlineResponse20020.ts
|
||||
models/InlineResponse20021.ts
|
||||
models/InlineResponse20022.ts
|
||||
models/InlineResponse20023.ts
|
||||
models/InlineResponse20024.ts
|
||||
models/InlineResponse20025.ts
|
||||
models/InlineResponse20026.ts
|
||||
models/InlineResponse20027.ts
|
||||
models/InlineResponse20028.ts
|
||||
models/InlineResponse20029.ts
|
||||
models/InlineResponse2003.ts
|
||||
models/InlineResponse20030.ts
|
||||
models/InlineResponse20031.ts
|
||||
models/InlineResponse20032.ts
|
||||
models/InlineResponse20033.ts
|
||||
models/InlineResponse20034.ts
|
||||
models/InlineResponse20035.ts
|
||||
models/InlineResponse20036.ts
|
||||
models/InlineResponse20037.ts
|
||||
models/InlineResponse20038.ts
|
||||
models/InlineResponse20039.ts
|
||||
models/InlineResponse2004.ts
|
||||
models/InlineResponse20040.ts
|
||||
models/InlineResponse20041.ts
|
||||
models/InlineResponse20042.ts
|
||||
models/InlineResponse20043.ts
|
||||
models/InlineResponse20044.ts
|
||||
models/InlineResponse20045.ts
|
||||
models/InlineResponse20046.ts
|
||||
models/InlineResponse20047.ts
|
||||
models/InlineResponse20048.ts
|
||||
models/InlineResponse20049.ts
|
||||
models/InlineResponse2005.ts
|
||||
models/InlineResponse20050.ts
|
||||
models/InlineResponse20051.ts
|
||||
models/InlineResponse20052.ts
|
||||
models/InlineResponse20053.ts
|
||||
models/InlineResponse20054.ts
|
||||
models/InlineResponse20055.ts
|
||||
models/InlineResponse20056.ts
|
||||
models/InlineResponse20057.ts
|
||||
models/InlineResponse20058.ts
|
||||
models/InlineResponse20059.ts
|
||||
models/InlineResponse2006.ts
|
||||
models/InlineResponse20060.ts
|
||||
models/InlineResponse2007.ts
|
||||
models/InlineResponse2008.ts
|
||||
models/InlineResponse2009.ts
|
||||
models/InlineResponse200Pagination.ts
|
||||
models/Invitation.ts
|
||||
models/InvitationStage.ts
|
||||
models/KubernetesServiceConnection.ts
|
||||
models/LDAPPropertyMapping.ts
|
||||
models/LDAPSource.ts
|
||||
models/LDAPSourceSyncStatus.ts
|
||||
models/LoginMetrics.ts
|
||||
models/Notification.ts
|
||||
models/NotificationRule.ts
|
||||
models/NotificationRuleGroup.ts
|
||||
models/NotificationRuleGroupParent.ts
|
||||
models/NotificationRuleTransports.ts
|
||||
models/NotificationTransport.ts
|
||||
models/NotificationTransportTest.ts
|
||||
models/OAuth2Provider.ts
|
||||
models/OAuth2ProviderSetupURLs.ts
|
||||
models/OAuthSource.ts
|
||||
models/OpenIDConnectConfiguration.ts
|
||||
models/Outpost.ts
|
||||
models/OutpostHealth.ts
|
||||
models/PasswordExpiryPolicy.ts
|
||||
models/PasswordPolicy.ts
|
||||
models/PasswordStage.ts
|
||||
models/Policy.ts
|
||||
models/PolicyBinding.ts
|
||||
models/PolicyBindingPolicy.ts
|
||||
models/PolicyBindingUser.ts
|
||||
models/PolicyBindingUserAkGroups.ts
|
||||
models/PolicyBindingUserGroups.ts
|
||||
models/PolicyBindingUserSources.ts
|
||||
models/PolicyBindingUserUserPermissions.ts
|
||||
models/Prompt.ts
|
||||
models/PromptStage.ts
|
||||
models/PropertyMapping.ts
|
||||
models/Provider.ts
|
||||
models/ProxyOutpostConfig.ts
|
||||
models/ProxyProvider.ts
|
||||
models/ReputationPolicy.ts
|
||||
models/SAMLMetadata.ts
|
||||
models/SAMLPropertyMapping.ts
|
||||
models/SAMLProvider.ts
|
||||
models/SAMLSource.ts
|
||||
models/ScopeMapping.ts
|
||||
models/ServiceConnection.ts
|
||||
models/ServiceConnectionState.ts
|
||||
models/Source.ts
|
||||
models/Stage.ts
|
||||
models/Task.ts
|
||||
models/Token.ts
|
||||
models/TokenView.ts
|
||||
models/TypeCreate.ts
|
||||
models/User.ts
|
||||
models/UserDeleteStage.ts
|
||||
models/UserLoginStage.ts
|
||||
models/UserLogoutStage.ts
|
||||
models/UserReputation.ts
|
||||
models/UserWriteStage.ts
|
||||
models/Version.ts
|
||||
models/index.ts
|
||||
runtime.ts
|
||||
1
web/src/api/.openapi-generator/VERSION
Normal file
1
web/src/api/.openapi-generator/VERSION
Normal file
@ -0,0 +1 @@
|
||||
5.1.0-SNAPSHOT
|
||||
@ -1,32 +0,0 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { Provider } from "./Providers";
|
||||
|
||||
export class Application {
|
||||
pk: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
provider?: Provider;
|
||||
|
||||
launch_url: string;
|
||||
meta_launch_url: string;
|
||||
meta_icon: string;
|
||||
meta_description: string;
|
||||
meta_publisher: string;
|
||||
policies: string[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<Application> {
|
||||
return DefaultClient.fetch<Application>(["core", "applications", slug]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Application>> {
|
||||
return DefaultClient.fetch<AKResponse<Application>>(["core", "applications"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/applications/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
|
||||
export class CertificateKeyPair {
|
||||
pk: string;
|
||||
name: string;
|
||||
fingerprint: string;
|
||||
cert_expiry: number;
|
||||
cert_subject: string;
|
||||
private_key_available: boolean;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<CertificateKeyPair> {
|
||||
return DefaultClient.fetch<CertificateKeyPair>(["crypto", "certificatekeypairs", slug]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<CertificateKeyPair>> {
|
||||
return DefaultClient.fetch<AKResponse<CertificateKeyPair>>(["crypto", "certificatekeypairs"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/crypto/certificates/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,10 +1,3 @@
|
||||
import { gettext } from "django";
|
||||
import { showMessage } from "../elements/messages/MessageContainer";
|
||||
import { getCookie } from "../utils";
|
||||
import { NotFoundError, RequestError } from "./Error";
|
||||
|
||||
export const VERSION = "v2beta";
|
||||
|
||||
export interface QueryArguments {
|
||||
page?: number;
|
||||
page_size?: number;
|
||||
@ -20,97 +13,20 @@ export interface BaseInheritanceModel {
|
||||
|
||||
}
|
||||
|
||||
export class Client {
|
||||
makeUrl(url: string[], query?: QueryArguments): string {
|
||||
let builtUrl = `/api/${VERSION}/${url.join("/")}/`;
|
||||
if (query) {
|
||||
const queryString = Object.keys(query)
|
||||
.filter((k) => query[k] !== null)
|
||||
// we default to a string in query[k] as we've filtered out the null above
|
||||
// this is just for type-hinting
|
||||
.map((k) => encodeURIComponent(k) + "=" + encodeURIComponent(query[k] || ""))
|
||||
.join("&");
|
||||
builtUrl += `?${queryString}`;
|
||||
}
|
||||
return builtUrl;
|
||||
}
|
||||
|
||||
fetch<T>(url: string[], query?: QueryArguments): Promise<T> {
|
||||
const finalUrl = this.makeUrl(url, query);
|
||||
return fetch(finalUrl)
|
||||
.then((r) => {
|
||||
if (r.status > 300) {
|
||||
switch (r.status) {
|
||||
case 404:
|
||||
throw new NotFoundError(`URL ${finalUrl} not found`);
|
||||
default:
|
||||
throw new RequestError(r.statusText);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
})
|
||||
.catch((e) => {
|
||||
showMessage({
|
||||
level_tag: "error",
|
||||
message: gettext(`Unexpected error while fetching: ${e.toString()}`),
|
||||
});
|
||||
return e;
|
||||
})
|
||||
.then((r) => r.json())
|
||||
.then((r) => <T>r);
|
||||
}
|
||||
|
||||
private writeRequest<T>(url: string[], body: T, method: string, query?: QueryArguments): Promise<T> {
|
||||
const finalUrl = this.makeUrl(url, query);
|
||||
const csrftoken = getCookie("authentik_csrf");
|
||||
const request = new Request(finalUrl, {
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
"Content-Type": "application/json",
|
||||
"X-CSRFToken": csrftoken,
|
||||
},
|
||||
});
|
||||
return fetch(request, {
|
||||
method: method,
|
||||
mode: "same-origin",
|
||||
body: JSON.stringify(body),
|
||||
})
|
||||
.then((r) => {
|
||||
if (r.status > 300) {
|
||||
switch (r.status) {
|
||||
case 404:
|
||||
throw new NotFoundError(`URL ${finalUrl} not found`);
|
||||
default:
|
||||
throw new RequestError(r.statusText);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
})
|
||||
.then((r) => r.json())
|
||||
.then((r) => <T>r);
|
||||
}
|
||||
|
||||
update<T>(url: string[], body: T, query?: QueryArguments): Promise<T> {
|
||||
return this.writeRequest(url, body, "PATCH", query);
|
||||
}
|
||||
}
|
||||
|
||||
export const DefaultClient = new Client();
|
||||
|
||||
export interface PBPagination {
|
||||
export interface AKPagination {
|
||||
next?: number;
|
||||
previous?: number;
|
||||
|
||||
count: number;
|
||||
current: number;
|
||||
total_pages: number;
|
||||
totalPages: number;
|
||||
|
||||
start_index: number;
|
||||
end_index: number;
|
||||
startIndex: number;
|
||||
endIndex: number;
|
||||
}
|
||||
|
||||
export interface AKResponse<T> {
|
||||
pagination: PBPagination;
|
||||
pagination: AKPagination;
|
||||
|
||||
results: Array<T>;
|
||||
}
|
||||
|
||||
@ -1,42 +1,39 @@
|
||||
import { DefaultClient } from "./Client";
|
||||
import * as Sentry from "@sentry/browser";
|
||||
import { Integrations } from "@sentry/tracing";
|
||||
import { VERSION } from "../constants";
|
||||
import { SentryIgnoredError } from "../common/errors";
|
||||
import { Configuration } from "./runtime";
|
||||
import { RootApi } from "./apis";
|
||||
import { Config } from ".";
|
||||
import { getCookie } from "../utils";
|
||||
|
||||
export class Config {
|
||||
branding_logo: string;
|
||||
branding_title: string;
|
||||
|
||||
error_reporting_enabled: boolean;
|
||||
error_reporting_environment: string;
|
||||
error_reporting_send_pii: boolean;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
export const DEFAULT_CONFIG = new Configuration({
|
||||
basePath: "/api/v2beta",
|
||||
headers: {
|
||||
"X-CSRFToken": getCookie("authentik_csrf"),
|
||||
}
|
||||
});
|
||||
|
||||
static get(): Promise<Config> {
|
||||
return DefaultClient.fetch<Config>(["root", "config"]).then((config) => {
|
||||
if (config.error_reporting_enabled) {
|
||||
Sentry.init({
|
||||
dsn: "https://a579bb09306d4f8b8d8847c052d3a1d3@sentry.beryju.org/8",
|
||||
release: `authentik@${VERSION}`,
|
||||
integrations: [
|
||||
new Integrations.BrowserTracing(),
|
||||
],
|
||||
tracesSampleRate: 0.6,
|
||||
environment: config.error_reporting_environment,
|
||||
beforeSend(event: Sentry.Event, hint: Sentry.EventHint) {
|
||||
if (hint.originalException instanceof SentryIgnoredError) {
|
||||
return null;
|
||||
}
|
||||
return event;
|
||||
},
|
||||
});
|
||||
console.debug("authentik/config: Sentry enabled.");
|
||||
}
|
||||
return config;
|
||||
});
|
||||
}
|
||||
export function configureSentry(): Promise<Config> {
|
||||
return new RootApi(DEFAULT_CONFIG).rootConfigList().then((config) => {
|
||||
if (config.errorReportingEnabled) {
|
||||
Sentry.init({
|
||||
dsn: "https://a579bb09306d4f8b8d8847c052d3a1d3@sentry.beryju.org/8",
|
||||
release: `authentik@${VERSION}`,
|
||||
integrations: [
|
||||
new Integrations.BrowserTracing(),
|
||||
],
|
||||
tracesSampleRate: 0.6,
|
||||
environment: config.errorReportingEnvironment,
|
||||
beforeSend(event: Sentry.Event, hint: Sentry.EventHint) {
|
||||
if (hint.originalException instanceof SentryIgnoredError) {
|
||||
return null;
|
||||
}
|
||||
return event;
|
||||
},
|
||||
});
|
||||
console.debug("authentik/config: Sentry enabled.");
|
||||
}
|
||||
return config;
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
import { Event } from "./Events";
|
||||
|
||||
export class Notification {
|
||||
pk: string;
|
||||
severity: string;
|
||||
body: string;
|
||||
created: string;
|
||||
event?: Event;
|
||||
seen: boolean;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Notification> {
|
||||
return DefaultClient.fetch<Notification>(["events", "notifications", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Notification>> {
|
||||
return DefaultClient.fetch<AKResponse<Notification>>(["events", "notifications"], filter);
|
||||
}
|
||||
|
||||
static markSeen(pk: string): Promise<{seen: boolean}> {
|
||||
return DefaultClient.update(["events", "notifications", pk], {
|
||||
"seen": true
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
import { Group } from "./Groups";
|
||||
|
||||
export class Rule {
|
||||
pk: string;
|
||||
name: string;
|
||||
transports: string[];
|
||||
severity: string;
|
||||
group?: Group;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Rule> {
|
||||
return DefaultClient.fetch<Rule>(["events", "rules", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Rule>> {
|
||||
return DefaultClient.fetch<AKResponse<Rule>>(["events", "rules"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/events/rules/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
|
||||
export class Transport {
|
||||
pk: string;
|
||||
name: string;
|
||||
mode: string;
|
||||
mode_verbose: string;
|
||||
webhook_url: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Transport> {
|
||||
return DefaultClient.fetch<Transport>(["events", "transports", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Transport>> {
|
||||
return DefaultClient.fetch<AKResponse<Transport>>(["events", "transports"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/events/transports/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { Event } from "./models";
|
||||
|
||||
export interface EventUser {
|
||||
pk: number;
|
||||
@ -11,37 +11,7 @@ export interface EventContext {
|
||||
[key: string]: EventContext | string | number | string[];
|
||||
}
|
||||
|
||||
export class Event {
|
||||
pk: string;
|
||||
export interface EventWithContext extends Event {
|
||||
user: EventUser;
|
||||
action: string;
|
||||
app: string;
|
||||
context: EventContext;
|
||||
client_ip: string;
|
||||
created: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Event> {
|
||||
return DefaultClient.fetch<Event>(["events", "events", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Event>> {
|
||||
return DefaultClient.fetch<AKResponse<Event>>(["events", "events"], filter);
|
||||
}
|
||||
|
||||
// events/events/top_per_user/?filter_action=authorize_application
|
||||
static topForUser(action: string): Promise<TopNEvent[]> {
|
||||
return DefaultClient.fetch<TopNEvent[]>(["events", "events", "top_per_user"], {
|
||||
"filter_action": action,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export interface TopNEvent {
|
||||
application: { [key: string]: string};
|
||||
counted_events: number;
|
||||
unique_users: number;
|
||||
}
|
||||
|
||||
@ -1,12 +1,4 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments, BaseInheritanceModel } from "./Client";
|
||||
import { TypeCreate } from "./Providers";
|
||||
|
||||
export enum ChallengeTypes {
|
||||
native = "native",
|
||||
response = "response",
|
||||
shell = "shell",
|
||||
redirect = "redirect",
|
||||
}
|
||||
import { ChallengeTypeEnum } from "./models";
|
||||
|
||||
export interface Error {
|
||||
code: string;
|
||||
@ -18,11 +10,12 @@ export interface ErrorDict {
|
||||
}
|
||||
|
||||
export interface Challenge {
|
||||
type: ChallengeTypes;
|
||||
type: ChallengeTypeEnum;
|
||||
component?: string;
|
||||
title?: string;
|
||||
response_errors?: ErrorDict;
|
||||
}
|
||||
|
||||
export interface WithUserInfoChallenge extends Challenge {
|
||||
pending_user: string;
|
||||
pending_user_avatar: string;
|
||||
@ -31,6 +24,7 @@ export interface WithUserInfoChallenge extends Challenge {
|
||||
export interface ShellChallenge extends Challenge {
|
||||
body: string;
|
||||
}
|
||||
|
||||
export interface RedirectChallenge extends Challenge {
|
||||
to: string;
|
||||
}
|
||||
@ -44,104 +38,3 @@ export enum FlowDesignation {
|
||||
Recovery = "recovery",
|
||||
StageConfiguration = "stage_configuration",
|
||||
}
|
||||
|
||||
export class Flow {
|
||||
pk: string;
|
||||
policybindingmodel_ptr_id: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
title: string;
|
||||
designation: FlowDesignation;
|
||||
background: string;
|
||||
stages: string[];
|
||||
policies: string[];
|
||||
cache_count: number;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<Flow> {
|
||||
return DefaultClient.fetch<Flow>(["flows", "instances", slug]);
|
||||
}
|
||||
|
||||
static diagram(slug: string): Promise<{ diagram: string }> {
|
||||
return DefaultClient.fetch<{ diagram: string }>(["flows", "instances", slug, "diagram"]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Flow>> {
|
||||
return DefaultClient.fetch<AKResponse<Flow>>(["flows", "instances"], filter);
|
||||
}
|
||||
|
||||
static cached(): Promise<number> {
|
||||
return DefaultClient.fetch<{ count: number }>(["flows", "instances", "cached"]).then(r => {
|
||||
return r.count;
|
||||
});
|
||||
}
|
||||
|
||||
static executor(slug: string): Promise<Challenge> {
|
||||
return DefaultClient.fetch(["flows", "executor", slug]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/flows/${rest}`;
|
||||
}
|
||||
}
|
||||
|
||||
export class Stage implements BaseInheritanceModel {
|
||||
pk: string;
|
||||
name: string;
|
||||
object_type: string;
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
flow_set: Flow[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<Stage> {
|
||||
return DefaultClient.fetch<Stage>(["stages", "all", slug]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Stage>> {
|
||||
return DefaultClient.fetch<AKResponse<Stage>>(["stages", "all"], filter);
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["stages", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/stages/${rest}`;
|
||||
}
|
||||
}
|
||||
|
||||
export class FlowStageBinding {
|
||||
|
||||
pk: string;
|
||||
policybindingmodel_ptr_id: string;
|
||||
target: string;
|
||||
stage: string;
|
||||
stage_obj: Stage;
|
||||
evaluate_on_plan: boolean;
|
||||
re_evaluate_policies: boolean;
|
||||
order: number;
|
||||
policies: string[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<FlowStageBinding> {
|
||||
return DefaultClient.fetch<FlowStageBinding>(["flows", "bindings", slug]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<FlowStageBinding>> {
|
||||
return DefaultClient.fetch<AKResponse<FlowStageBinding>>(["flows", "bindings"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/stages/bindings/${rest}`;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
import { EventContext } from "./Events";
|
||||
|
||||
export class Group {
|
||||
|
||||
pk: string;
|
||||
name: string;
|
||||
is_superuser: boolean;
|
||||
attributes: EventContext;
|
||||
parent?: Group;
|
||||
users: number[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Group> {
|
||||
return DefaultClient.fetch<Group>(["core", "groups", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Group>> {
|
||||
return DefaultClient.fetch<AKResponse<Group>>(["core", "groups"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/groups/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
import { EventContext } from "./Events";
|
||||
import { User } from "./Users";
|
||||
|
||||
export class Invitation {
|
||||
|
||||
pk: string;
|
||||
expires: number;
|
||||
fixed_date: EventContext;
|
||||
created_by: User;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Invitation> {
|
||||
return DefaultClient.fetch<Invitation>(["stages", "invitation", "invitations", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Invitation>> {
|
||||
return DefaultClient.fetch<AKResponse<Invitation>>(["stages", "invitation", "invitations"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/stages/invitations/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,79 +0,0 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { Provider, TypeCreate } from "./Providers";
|
||||
|
||||
export interface OutpostHealth {
|
||||
last_seen: number;
|
||||
version: string;
|
||||
version_should: string;
|
||||
version_outdated: boolean;
|
||||
}
|
||||
|
||||
export class Outpost {
|
||||
|
||||
pk: string;
|
||||
name: string;
|
||||
providers: number[];
|
||||
providers_obj: Provider[];
|
||||
service_connection?: string;
|
||||
_config: QueryArguments;
|
||||
token_identifier: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Outpost> {
|
||||
return DefaultClient.fetch<Outpost>(["outposts", "outposts", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Outpost>> {
|
||||
return DefaultClient.fetch<AKResponse<Outpost>>(["outposts", "outposts"], filter);
|
||||
}
|
||||
|
||||
static health(pk: string): Promise<OutpostHealth[]> {
|
||||
return DefaultClient.fetch<OutpostHealth[]>(["outposts", "outposts", pk, "health"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/outposts/${rest}`;
|
||||
}
|
||||
}
|
||||
|
||||
export interface OutpostServiceConnectionState {
|
||||
version: string;
|
||||
healthy: boolean;
|
||||
}
|
||||
|
||||
export class OutpostServiceConnection {
|
||||
pk: string;
|
||||
name: string;
|
||||
local: boolean;
|
||||
object_type: string;
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<OutpostServiceConnection> {
|
||||
return DefaultClient.fetch<OutpostServiceConnection>(["outposts", "service_connections", "all", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<OutpostServiceConnection>> {
|
||||
return DefaultClient.fetch<AKResponse<OutpostServiceConnection>>(["outposts", "service_connections", "all"], filter);
|
||||
}
|
||||
|
||||
static state(pk: string): Promise<OutpostServiceConnectionState> {
|
||||
return DefaultClient.fetch<OutpostServiceConnectionState>(["outposts", "service_connections", "all", pk, "state"]);
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["outposts", "service_connections", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/outpost_service_connections/${rest}`;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
import { DefaultClient, BaseInheritanceModel, AKResponse, QueryArguments } from "./Client";
|
||||
import { TypeCreate } from "./Providers";
|
||||
|
||||
export class Policy implements BaseInheritanceModel {
|
||||
pk: string;
|
||||
name: string;
|
||||
execution_logging: boolean;
|
||||
object_type: string;
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
bound_to: number;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Policy> {
|
||||
return DefaultClient.fetch<Policy>(["policies", "all", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Policy>> {
|
||||
return DefaultClient.fetch<AKResponse<Policy>>(["policies", "all"], filter);
|
||||
}
|
||||
|
||||
static cached(): Promise<number> {
|
||||
return DefaultClient.fetch<{ count: number }>(["policies", "all", "cached"]).then(r => {
|
||||
return r.count;
|
||||
});
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["policies", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/policies/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { Group } from "./Groups";
|
||||
import { Policy } from "./Policies";
|
||||
import { User } from "./Users";
|
||||
|
||||
export class PolicyBinding {
|
||||
pk: string;
|
||||
policy?: Policy;
|
||||
group?: Group;
|
||||
user?: User;
|
||||
target: string;
|
||||
enabled: boolean;
|
||||
order: number;
|
||||
timeout: number;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<PolicyBinding> {
|
||||
return DefaultClient.fetch<PolicyBinding>(["policies", "bindings", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<PolicyBinding>> {
|
||||
return DefaultClient.fetch<AKResponse<PolicyBinding>>(["policies", "bindings"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/policies/bindings/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
import { DefaultClient, QueryArguments, AKResponse } from "./Client";
|
||||
import { Stage } from "./Flows";
|
||||
|
||||
export class Prompt {
|
||||
|
||||
pk: string;
|
||||
field_key: string;
|
||||
label: string;
|
||||
type: string;
|
||||
required: boolean;
|
||||
placeholder: string;
|
||||
order: number;
|
||||
promptstage_set: Stage[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<Prompt> {
|
||||
return DefaultClient.fetch<Prompt>(["stages", "prompt", "prompts", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Prompt>> {
|
||||
return DefaultClient.fetch<AKResponse<Prompt>>(["stages", "prompt", "prompts"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/stages_prompts/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { TypeCreate } from "./Providers";
|
||||
|
||||
export class PropertyMapping {
|
||||
pk: string;
|
||||
name: string;
|
||||
expression: string;
|
||||
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<PropertyMapping> {
|
||||
return DefaultClient.fetch<PropertyMapping>(["propertymappings", "all", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<PropertyMapping>> {
|
||||
return DefaultClient.fetch<AKResponse<PropertyMapping>>(["propertymappings", "all"], filter);
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["propertymappings", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/property-mappings/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,40 +0,0 @@
|
||||
import { BaseInheritanceModel, DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
|
||||
export interface TypeCreate {
|
||||
name: string;
|
||||
description: string;
|
||||
link: string;
|
||||
}
|
||||
|
||||
export class Provider implements BaseInheritanceModel {
|
||||
pk: number;
|
||||
name: string;
|
||||
authorization_flow: string;
|
||||
object_type: string;
|
||||
|
||||
assigned_application_slug?: string;
|
||||
assigned_application_name?: string;
|
||||
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(id: number): Promise<Provider> {
|
||||
return DefaultClient.fetch<Provider>(["providers", "all", id.toString()]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Provider>> {
|
||||
return DefaultClient.fetch<AKResponse<Provider>>(["providers", "all"], filter);
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["providers", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/providers/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
import { BaseInheritanceModel, DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { TypeCreate } from "./Providers";
|
||||
|
||||
export class Source implements BaseInheritanceModel {
|
||||
pk: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
enabled: boolean;
|
||||
authentication_flow: string;
|
||||
enrollment_flow: string;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
object_type: string;
|
||||
verbose_name: string;
|
||||
verbose_name_plural: string;
|
||||
|
||||
static get(slug: string): Promise<Source> {
|
||||
return DefaultClient.fetch<Source>(["sources", "all", slug]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Source>> {
|
||||
return DefaultClient.fetch<AKResponse<Source>>(["sources", "all"], filter);
|
||||
}
|
||||
|
||||
static getTypes(): Promise<TypeCreate[]> {
|
||||
return DefaultClient.fetch<TypeCreate[]>(["sources", "all", "types"]);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/sources/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
import { DefaultClient, QueryArguments } from "./Client";
|
||||
|
||||
export enum TaskStatus {
|
||||
SUCCESSFUL = 1,
|
||||
WARNING = 2,
|
||||
ERROR = 4,
|
||||
}
|
||||
|
||||
export class SystemTask {
|
||||
|
||||
task_name: string;
|
||||
task_description: string;
|
||||
task_finish_timestamp: number;
|
||||
status: TaskStatus;
|
||||
messages: string[];
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(task_name: string): Promise<SystemTask> {
|
||||
return DefaultClient.fetch<SystemTask>(["admin", "system_tasks", task_name]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<SystemTask[]> {
|
||||
return DefaultClient.fetch<SystemTask[]>(["admin", "system_tasks"], filter);
|
||||
}
|
||||
|
||||
static retry(task_name: string): string {
|
||||
return DefaultClient.makeUrl(["admin", "system_tasks", task_name, "retry"]);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,47 +0,0 @@
|
||||
import { AKResponse, DefaultClient, QueryArguments } from "./Client";
|
||||
import { User } from "./Users";
|
||||
|
||||
export enum TokenIntent {
|
||||
INTENT_VERIFICATION = "verification",
|
||||
INTENT_API = "api",
|
||||
INTENT_RECOVERY = "recovery",
|
||||
}
|
||||
|
||||
export class Token {
|
||||
|
||||
pk: string;
|
||||
identifier: string;
|
||||
intent: TokenIntent;
|
||||
user: User;
|
||||
description: string;
|
||||
|
||||
expires: number;
|
||||
expiring: boolean;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<User> {
|
||||
return DefaultClient.fetch<User>(["core", "tokens", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<Token>> {
|
||||
return DefaultClient.fetch<AKResponse<Token>>(["core", "tokens"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/tokens/${rest}`;
|
||||
}
|
||||
|
||||
static userUrl(rest: string): string {
|
||||
return `/-/user/tokens/${rest}`;
|
||||
}
|
||||
|
||||
static getKey(identifier: string): Promise<string> {
|
||||
return DefaultClient.fetch<{ key: string }>(["core", "tokens", identifier, "view_key"]).then(
|
||||
(r) => r.key
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,45 +1,11 @@
|
||||
import { DefaultClient, AKResponse, QueryArguments } from "./Client";
|
||||
import { CoreApi } from "./apis";
|
||||
import { DEFAULT_CONFIG } from "./Config";
|
||||
import { User } from "./models";
|
||||
|
||||
let _globalMePromise: Promise<User>;
|
||||
|
||||
export class User {
|
||||
pk: number;
|
||||
username: string;
|
||||
name: string;
|
||||
is_superuser: boolean;
|
||||
email: boolean;
|
||||
avatar: string;
|
||||
is_active: boolean;
|
||||
last_login: number;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(pk: string): Promise<User> {
|
||||
return DefaultClient.fetch<User>(["core", "users", pk]);
|
||||
}
|
||||
|
||||
static list(filter?: QueryArguments): Promise<AKResponse<User>> {
|
||||
return DefaultClient.fetch<AKResponse<User>>(["core", "users"], filter);
|
||||
}
|
||||
|
||||
static adminUrl(rest: string): string {
|
||||
return `/administration/users/${rest}`;
|
||||
}
|
||||
|
||||
static me(): Promise<User> {
|
||||
if (!_globalMePromise) {
|
||||
_globalMePromise = DefaultClient.fetch<User>(["core", "users", "me"]);
|
||||
}
|
||||
return _globalMePromise;
|
||||
}
|
||||
|
||||
static count(): Promise<number> {
|
||||
return DefaultClient.fetch<AKResponse<User>>(["core", "users"], {
|
||||
"page_size": 1
|
||||
}).then(r => {
|
||||
return r.pagination.count;
|
||||
});
|
||||
export function me(): Promise<User> {
|
||||
if (!_globalMePromise) {
|
||||
_globalMePromise = new CoreApi(DEFAULT_CONFIG).coreUsersMe({});
|
||||
}
|
||||
return _globalMePromise;
|
||||
}
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
import { DefaultClient } from "./Client";
|
||||
|
||||
export class Version {
|
||||
|
||||
version_current: string;
|
||||
version_latest: string;
|
||||
outdated: boolean;
|
||||
|
||||
constructor() {
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(): Promise<Version> {
|
||||
return DefaultClient.fetch<Version>(["admin", "version"]);
|
||||
}
|
||||
|
||||
}
|
||||
97
web/src/api/legacy.ts
Normal file
97
web/src/api/legacy.ts
Normal file
@ -0,0 +1,97 @@
|
||||
export class AdminURLManager {
|
||||
|
||||
static applications(rest: string): string {
|
||||
return `/administration/applications/${rest}`;
|
||||
}
|
||||
|
||||
static cryptoCertificates(rest: string): string {
|
||||
return `/administration/crypto/certificates/${rest}`;
|
||||
}
|
||||
|
||||
static policies(rest: string): string {
|
||||
return `/administration/policies/${rest}`;
|
||||
}
|
||||
|
||||
static policyBindings(rest: string): string {
|
||||
return `/administration/policies/bindings/${rest}`;
|
||||
}
|
||||
|
||||
static providers(rest: string): string {
|
||||
return `/administration/providers/${rest}`;
|
||||
}
|
||||
|
||||
static propertyMappings(rest: string): string {
|
||||
return `/administration/property-mappings/${rest}`;
|
||||
}
|
||||
|
||||
static outposts(rest: string): string {
|
||||
return `/administration/outposts/${rest}`;
|
||||
}
|
||||
|
||||
static outpostServiceConnections(rest: string): string {
|
||||
return `/administration/outpost_service_connections/${rest}`;
|
||||
}
|
||||
|
||||
static flows(rest: string): string {
|
||||
return `/administration/flows/${rest}`;
|
||||
}
|
||||
|
||||
static stages(rest: string): string {
|
||||
return `/administration/stages/${rest}`;
|
||||
}
|
||||
|
||||
static stagePrompts(rest: string): string {
|
||||
return `/administration/stages_prompts/${rest}`;
|
||||
}
|
||||
|
||||
static stageInvitations(rest: string): string {
|
||||
return `/administration/stages/invitations/${rest}`;
|
||||
}
|
||||
|
||||
static stageBindings(rest: string): string {
|
||||
return `/administration/stages/bindings/${rest}`;
|
||||
}
|
||||
|
||||
static sources(rest: string): string {
|
||||
return `/administration/sources/${rest}`;
|
||||
}
|
||||
|
||||
static tokens(rest: string): string {
|
||||
return `/administration/tokens/${rest}`;
|
||||
}
|
||||
|
||||
static eventRules(rest: string): string {
|
||||
return `/administration/events/rules/${rest}`;
|
||||
}
|
||||
|
||||
static eventTransports(rest: string): string {
|
||||
return `/administration/events/transports/${rest}`;
|
||||
}
|
||||
|
||||
static users(rest: string): string {
|
||||
return `/administration/users/${rest}`;
|
||||
}
|
||||
|
||||
static groups(rest: string): string {
|
||||
return `/administration/groups/${rest}`;
|
||||
}
|
||||
}
|
||||
|
||||
export class UserURLManager {
|
||||
|
||||
static tokens(rest: string): string {
|
||||
return `/-/user/tokens/${rest}`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class AppURLManager {
|
||||
|
||||
static sourceSAML(slug: string, rest: string): string {
|
||||
return `/source/saml/${slug}/${rest}`;
|
||||
}
|
||||
static providerSAML(rest: string): string {
|
||||
return `/application/saml/${rest}`;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,43 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Provider } from "../Providers";
|
||||
|
||||
export interface OAuth2SetupURLs {
|
||||
|
||||
issuer?: string;
|
||||
authorize: string;
|
||||
token: string;
|
||||
user_info: string;
|
||||
provider_info?: string;
|
||||
logout?: string;
|
||||
|
||||
}
|
||||
|
||||
export class OAuth2Provider extends Provider {
|
||||
client_type: string
|
||||
client_id: string;
|
||||
client_secret: string;
|
||||
token_validity: string;
|
||||
include_claims_in_id_token: boolean;
|
||||
jwt_alg: string;
|
||||
rsa_key: string;
|
||||
redirect_uris: string;
|
||||
sub_mode: string;
|
||||
issuer_mode: string;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(id: number): Promise<OAuth2Provider> {
|
||||
return DefaultClient.fetch<OAuth2Provider>(["providers", "oauth2", id.toString()]);
|
||||
}
|
||||
|
||||
static getLaunchURls(id: number): Promise<OAuth2SetupURLs> {
|
||||
return DefaultClient.fetch(["providers", "oauth2", id.toString(), "setup_urls"]);
|
||||
}
|
||||
|
||||
static appUrl(rest: string): string {
|
||||
return `/application/oauth2/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Provider } from "../Providers";
|
||||
|
||||
export class ProxyProvider extends Provider {
|
||||
internal_host: string;
|
||||
external_host: string;
|
||||
internal_host_ssl_validation: boolean
|
||||
certificate?: string;
|
||||
skip_path_regex: string;
|
||||
basic_auth_enabled: boolean;
|
||||
basic_auth_password_attribute: string;
|
||||
basic_auth_user_attribute: string;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(id: number): Promise<ProxyProvider> {
|
||||
return DefaultClient.fetch<ProxyProvider>(["providers", "proxy", id.toString()]);
|
||||
}
|
||||
|
||||
static getMetadata(id: number): Promise<{ metadata: string }> {
|
||||
return DefaultClient.fetch(["providers", "proxy", id.toString(), "metadata"]);
|
||||
}
|
||||
|
||||
static appUrl(rest: string): string {
|
||||
return `/application/proxy/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Provider } from "../Providers";
|
||||
|
||||
export class SAMLProvider extends Provider {
|
||||
acs_url: string;
|
||||
audience: string;
|
||||
issuer: string;
|
||||
assertion_valid_not_before: string;
|
||||
assertion_valid_not_on_or_after: string;
|
||||
session_valid_not_on_or_after: string;
|
||||
name_id_mapping?: string;
|
||||
digest_algorithm: string;
|
||||
signature_algorithm: string;
|
||||
signing_kp?: string;
|
||||
verification_kp?: string;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(id: number): Promise<SAMLProvider> {
|
||||
return DefaultClient.fetch<SAMLProvider>(["providers", "saml", id.toString()]);
|
||||
}
|
||||
|
||||
static getMetadata(id: number): Promise<{ metadata: string }> {
|
||||
return DefaultClient.fetch(["providers", "saml", id.toString(), "metadata"]);
|
||||
}
|
||||
|
||||
static appUrl(rest: string): string {
|
||||
return `/application/saml/${rest}`;
|
||||
}
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Source } from "../Sources";
|
||||
|
||||
export class LDAPSource extends Source {
|
||||
server_uri: string;
|
||||
bind_cn: string;
|
||||
start_tls: boolean
|
||||
base_dn: string;
|
||||
additional_user_dn: string;
|
||||
additional_group_dn: string;
|
||||
user_object_filter: string;
|
||||
group_object_filter: string;
|
||||
group_membership_field: string;
|
||||
object_uniqueness_field: string;
|
||||
sync_users: boolean;
|
||||
sync_users_password: boolean;
|
||||
sync_groups: boolean;
|
||||
sync_parent_group?: string;
|
||||
property_mappings: string[];
|
||||
property_mappings_group: string[];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<LDAPSource> {
|
||||
return DefaultClient.fetch<LDAPSource>(["sources", "ldap", slug]);
|
||||
}
|
||||
|
||||
static syncStatus(slug: string): Promise<{ last_sync?: number }> {
|
||||
return DefaultClient.fetch(["sources", "ldap", slug, "sync_status"]);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Source } from "../Sources";
|
||||
|
||||
export class OAuthSource extends Source {
|
||||
provider_type: string;
|
||||
request_token_url: string;
|
||||
authorization_url: string;
|
||||
access_token_url: string;
|
||||
profile_url: string;
|
||||
consumer_key: string;
|
||||
callback_url: string;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<OAuthSource> {
|
||||
return DefaultClient.fetch<OAuthSource>(["sources", "oauth", slug]);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
import { DefaultClient } from "../Client";
|
||||
import { Source } from "../Sources";
|
||||
|
||||
export class SAMLSource extends Source {
|
||||
issuer: string;
|
||||
sso_url: string;
|
||||
slo_url: string;
|
||||
allow_idp_initiated: boolean;
|
||||
name_id_policy: string;
|
||||
binding_type: string
|
||||
signing_kp?: string;
|
||||
digest_algorithm: string;
|
||||
signature_algorithm: string;
|
||||
temporary_user_delete_after: string;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
throw Error();
|
||||
}
|
||||
|
||||
static get(slug: string): Promise<SAMLSource> {
|
||||
return DefaultClient.fetch<SAMLSource>(["sources", "saml", slug]);
|
||||
}
|
||||
|
||||
static getMetadata(slug: string): Promise<{ metadata: string }> {
|
||||
return DefaultClient.fetch(["sources", "saml", slug, "metadata"]);
|
||||
}
|
||||
|
||||
static appUrl(slug: string, rest: string): string {
|
||||
return `/source/saml/${slug}/${rest}`;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user