Skip to content

Commit

Permalink
remove socks, update plugins add credential provider
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Werfling committed May 18, 2024
1 parent aada0c3 commit bb3ccdf
Show file tree
Hide file tree
Showing 55 changed files with 227 additions and 766 deletions.
9 changes: 8 additions & 1 deletion backend/src/Routes/Main/Credential/Provider.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import {CredentialProviderResponse} from 'flyingfish_schemas';
import {CredentialProviderResponse, StatusCodes} from 'flyingfish_schemas';
import {CredentialProviders} from '../../../inc/Provider/CredentialProvider/CredentialProviders.js';

export class Provider {

public static async getProviders(): Promise<CredentialProviderResponse> {
const cp = new CredentialProviders();
const providers = await cp.getProviders();

return {
statusCode: StatusCodes.OK,
list: providers
};
}

}
3 changes: 2 additions & 1 deletion backend/src/Routes/Main/Ssl/Details.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ export class Details {
const domain = await DomainServiceDB.getInstance().findOne(http.domain_id);

if (domain) {
const provider = await SslCertProviders.getProvider(http.cert_provider);
const sp = new SslCertProviders();
const provider = await sp.getProvider(http.cert_provider);

if (provider) {
// TODO Wildcard
Expand Down
4 changes: 3 additions & 1 deletion backend/src/Routes/Main/Ssl/Providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ export class Providers {
* getProviders
*/
public static async getProviders(): Promise<SslProvidersResponse> {
const sp = new SslCertProviders();

return {
statusCode: StatusCodes.OK,
list: await SslCertProviders.getProviders()
list: await sp.getProviders()
};
}

Expand Down
9 changes: 7 additions & 2 deletions backend/src/inc/Credential/Credential.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import {CredentialLocationServiceDB, CredentialServiceDB, Logger, NginxLocationServiceDB} from 'flyingfish_core';
import {
CredentialLocationServiceDB,
CredentialServiceDB,
ICredentialAuthBasic,
Logger,
NginxLocationServiceDB
} from 'flyingfish_core';
import {CredentialSchemaBasic} from 'flyingfish_schemas';
import {CredentialProvider} from './CredentialProvider.js';
import {ICredentialAuthBasic} from './ICredential.js';

/**
* Credential
Expand Down
5 changes: 2 additions & 3 deletions backend/src/inc/Credential/CredentialDatabase.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import * as bcrypt from 'bcrypt';
import {CredentialDB, CredentialUserServiceDB, Logger} from 'flyingfish_core';
import {CredentialSchemaTypes} from 'flyingfish_schemas/dist/src/index.js';
import {ICredential, ICredentialAuthBasic} from './ICredential.js';
import {CredentialDB, CredentialUserServiceDB, Logger, ICredential, ICredentialAuthBasic} from 'flyingfish_core';
import {CredentialSchemaTypes} from 'flyingfish_schemas';

/**
* CredentialDB
Expand Down
4 changes: 2 additions & 2 deletions backend/src/inc/Credential/CredentialProvider.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {CredentialDB} from 'flyingfish_core';
import {CredentialDB, ICredential} from 'flyingfish_core';
import {CredentialDatabase} from './CredentialDatabase.js';
import {ICredential} from './ICredential.js';


/**
* CredentialProvider
Expand Down
17 changes: 0 additions & 17 deletions backend/src/inc/Credential/ICredential.ts

This file was deleted.

25 changes: 15 additions & 10 deletions backend/src/inc/Provider/CredentialProvider/CredentialProviders.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
import {ICredentialProvider, ICredentialProviders} from 'flyingfish_core';
import {
BaseProviders,
ICredentialProvider,
ICredentialProviders
} from 'flyingfish_core';
import {ProviderEntry} from 'flyingfish_schemas';

export class CredentialProviders implements ICredentialProviders {

public async getCredentialProvider(
name: string,
sourceCredentialId: number
): Promise<ICredentialProvider | null> {
return null;
}
/**
* Credential providers
*/
export class CredentialProviders extends BaseProviders implements ICredentialProviders {

/**
* Return a provider by name
* @param {string} name
* @returns {ICredentialProvider | null}
*/
public async getProvider(name: string): Promise<ICredentialProvider | null> {
return null;
return this._getProvider<ICredentialProvider>(name);
}

public getProviders(): Promise<ProviderEntry[]> {
Expand Down
26 changes: 9 additions & 17 deletions backend/src/inc/Provider/SslCertProvider/SslCertProviders.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,24 @@
import {ASslCertProviderOnLoadEvent, ISslCertProvider, ISslCertProviders, PluginManager} from 'flyingfish_core';
import {
ASslCertProviderOnLoadEvent,
BaseProviders,
ISslCertProvider,
ISslCertProviders,
PluginManager
} from 'flyingfish_core';
import {ProviderEntry} from 'flyingfish_schemas';

/**
* Ssl Certificate provider.
*/
export class SslCertProviders implements ISslCertProviders {
export class SslCertProviders extends BaseProviders implements ISslCertProviders {

/**
* Get a provider object by provider name.
* @param {string} name - Name of provider.
* @returns {ISslCertProvider|null}
*/
public async getProvider(name: string): Promise<ISslCertProvider | null> {
const events = PluginManager.getInstance().getAllEvents<ASslCertProviderOnLoadEvent>(
ASslCertProviderOnLoadEvent
);

for await (const event of events) {
const providers = await event.getProviders();

for (const provider of providers) {
if (provider.getName() === name) {
return provider;
}
}
}

return null;
return this._getProvider<ISslCertProvider>(name);
}

/**
Expand Down
11 changes: 6 additions & 5 deletions backend/src/inc/Service/NginxService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import {
NginxUpstreamDB,
NginxUpstreamServiceDB,
SshPortDB,
SshPortServiceDB
SshPortServiceDB,
SslCertBundel
} from 'flyingfish_core';
import {
NginxHttpVariableContextType,
Expand All @@ -28,8 +29,7 @@ import {
NginxListenVariableContextType,
NginxLocationDestinationTypes,
NginxStreamDestinationType,
NginxStreamSshR,
SslCertBundel
NginxStreamSshR
} from 'flyingfish_schemas';
import fs from 'fs/promises';
import path from 'path';
Expand Down Expand Up @@ -599,7 +599,7 @@ export class NginxService {
weight: 0,
max_fails: 0,
fail_timeout: 0,
unix_sock: unixSocket
//unix_sock: unixSocket
});
} else {
Logger.getLogger().silly(`Destination listen not found by domain: ${domainName}`, {
Expand Down Expand Up @@ -982,7 +982,8 @@ export class NginxService {
// ssl use ---------------------------------------------------------------------------------------------

if (ssl_enable) {
const provider = await SslCertProviders.getProvider(httpSubCollect.http.cert_provider);
const sslCertProviders = new SslCertProviders();
const provider = await sslCertProviders.getProvider(httpSubCollect.http.cert_provider);

if (provider) {
let sslBundel: SslCertBundel | null = null;
Expand Down
20 changes: 20 additions & 0 deletions core/src/inc/Credential/ICredential.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import {CredentialSchemaTypes} from 'flyingfish_schemas';

/**
* Interface of credential
*/
export interface ICredential {

/**
* Return the supported types
* @returns {CredentialSchemaTypes[]}
*/
getSupports(): CredentialSchemaTypes[];

/**
* Return the credential name
* @returns {string}
*/
getName(): string;

}
16 changes: 16 additions & 0 deletions core/src/inc/Credential/ICredentialAuthBasic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import {ICredential} from './ICredential.js';

/**
* Interface of credential auth basic
*/
export interface ICredentialAuthBasic extends ICredential {

/**
* Check an auth by username and password
* @param {string} username
* @param {string} password
* @returns {boolean}
*/
authBasic(username: string, password: string): Promise<boolean>;

}
3 changes: 2 additions & 1 deletion core/src/inc/PluginSystem/PluginDefinition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ export const SchemaPluginDefinition = Vts.object({
version: Vts.string(),
author: Vts.string(),
url: Vts.string(),
main: Vts.string()
main: Vts.string(),
main_directory: Vts.optional(Vts.array(Vts.string()))
});

/**
Expand Down
25 changes: 21 additions & 4 deletions core/src/inc/PluginSystem/PluginManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,15 +160,32 @@ export class PluginManager {
*/
public async load(plugin: PluginInformation): Promise<boolean> {
try {
let importFile: string|null = null;

const pluginMain = path.join(plugin.path, plugin.definition.main);

if (!await FileHelper.fileExist(pluginMain)) {
throw new Error(`plugin main not found: ${pluginMain}`);
if (await FileHelper.fileExist(pluginMain, true)) {
importFile = pluginMain;
}

if (plugin.definition.main_directory) {
for await (const dir of plugin.definition.main_directory) {
const pluginSubMain = path.join(plugin.path, dir, plugin.definition.main);

if (await FileHelper.fileExist(pluginSubMain, true)) {
importFile = pluginSubMain;
break;
}
}
}

if (importFile === null) {
throw new Error(`plugin main not found: ${plugin.path}`);
}

Logger.getLogger().silly(`PluginManager::load: file plugin: ${pluginMain} (${plugin.definition.name})`);
Logger.getLogger().silly(`PluginManager::load: file plugin: ${importFile} (${plugin.definition.name})`);

const oPlugin = await import(pluginMain);
const oPlugin = await import(importFile);

console.log(oPlugin);

Expand Down
15 changes: 15 additions & 0 deletions core/src/inc/Provider/AProviderOnLoadEvent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {APluginEvent} from '../PluginSystem/APluginEvent.js';
import {IProvider} from './IProvider.js';

/**
* Provider on load event
*/
export abstract class AProviderOnLoadEvent<T extends IProvider> extends APluginEvent {

/**
* Return all supported Providers.
* @returns {T[]}
*/
public abstract getProviders(): Promise<T[]>;

}
29 changes: 29 additions & 0 deletions core/src/inc/Provider/BaseProviders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import {PluginManager} from '../PluginSystem/PluginManager.js';
import {AProviderOnLoadEvent} from './AProviderOnLoadEvent.js';
import {IProvider} from './IProvider.js';

export class BaseProviders {

/**
* Return a provider by name
* @param {string} name
* @protected
* @returns {T|null}
*/
protected async _getProvider<T extends IProvider>(name: string): Promise<T | null> {
const events = PluginManager.getInstance().getAllEvents<AProviderOnLoadEvent<T>>(AProviderOnLoadEvent<T>);

for await (const event of events) {
const providers = await event.getProviders();

for (const provider of providers) {
if (provider.getName() === name) {
return provider;
}
}
}

return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import {AProviderOnLoadEvent} from '../AProviderOnLoadEvent.js';
import {ICredentialProvider} from './ICredentialProvider.js';

/**
* Abstract class for provider on load event
*/
export abstract class ACredentialProviderOnLoadEvent extends AProviderOnLoadEvent<ICredentialProvider> {}
10 changes: 9 additions & 1 deletion core/src/inc/Provider/CredentialProvider/ICredentialProvider.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
import {ICredential} from '../../Credential/ICredential.js';
import {IProvider} from '../IProvider.js';

/**
* Interface of a Credential provider
*/
export type ICredentialProvider = IProvider;
export interface ICredentialProvider extends IProvider {

/**
* Return the credential
*/
getCredential(): ICredential;

}
12 changes: 1 addition & 11 deletions core/src/inc/Provider/CredentialProvider/ICredentialProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,4 @@ import {ICredentialProvider} from './ICredentialProvider.js';
/**
* Interface of credential providers
*/
export interface ICredentialProviders extends IProviders<ICredentialProvider> {

/**
* Return the credential provider by name
* @param {string} name
* @param {number} sourceCredentialId
* @returns {IProvider|null}
*/
getCredentialProvider(name: string, sourceCredentialId: number): Promise<ICredentialProvider|null>;

}
export type ICredentialProviders = IProviders<ICredentialProvider>;
Loading

0 comments on commit bb3ccdf

Please sign in to comment.