Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,7 @@ typings/
# End of https://www.gitignore.io/api/node

# Ignore loki file
.store
.store

# Ignore TypeScript build output
app/dist
11 changes: 7 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,17 @@ script:
- (cd e2e && npm run lint)
- (cd ui && npm run lint)

# Package app
- (cd app && npm run build)

# Package ui
- (cd ui && npm run build)

# Run UT
- (cd app && npm test)

# Report to Code Climate
- (cd app && ./cc-test-reporter after-build -t lcov --debug --exit-code $TRAVIS_TEST_RESULT)

# Package ui
- (cd ui && npm run build)
# - (cd app && ./cc-test-reporter after-build -t lcov --debug --exit-code $TRAVIS_TEST_RESULT)

# Build wud docker image
- docker build -t wud --build-arg WUD_VERSION=$IMAGE_VERSION .
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ CMD ["node", "index"]
COPY --from=dependencies /home/node/app/node_modules ./node_modules

# Copy app
COPY app/ ./
COPY app/dist ./

# Copy ui
COPY ui/dist/ ./ui
32 changes: 14 additions & 18 deletions app/api/api.js → app/api/api.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
const express = require('express');
const passport = require('passport');
const appRouter = require('./app');
const containerRouter = require('./container');
const watcherRouter = require('./watcher');
const triggerRouter = require('./trigger');
const registryRouter = require('./registry');
const authenticationRouter = require('./authentication');
const logRouter = require('./log');
const storeRouter = require('./store');
const serverRouter = require('./server');
const auth = require('./auth');
import express, { Request, Response } from 'express';
import passport from 'passport';
import * as appRouter from './app';
import * as containerRouter from './container';
import * as watcherRouter from './watcher';
import * as triggerRouter from './trigger';
import * as registryRouter from './registry';
import * as authenticationRouter from './authentication';
import * as logRouter from './log';
import * as storeRouter from './store';
import * as serverRouter from './server';
import * as auth from './auth';

/**
* Init the API router.
* @returns {*|Router}
*/
function init() {
export function init() {
const router = express.Router();

// Mount app router
Expand Down Expand Up @@ -49,11 +48,8 @@ function init() {
router.use('/authentications', authenticationRouter.init());

// All other API routes => 404
router.get('/*', (req, res) => res.sendStatus(404));
router.get('/{*any}', (_req: Request, res: Response) => { res.sendStatus(404) });

return router;
}

module.exports = {
init,
};
16 changes: 6 additions & 10 deletions app/api/app.js → app/api/app.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
const express = require('express');
const nocache = require('nocache');
const storeApp = require('../store/app');
import express from 'express';
import nocache from 'nocache';
import * as storeApp from '../store/app';
import { Request, Response } from 'express';

/**
* App infos router.
* @type {Router}
*/
const router = express.Router();

Expand All @@ -13,19 +13,15 @@ const router = express.Router();
* @param req the request
* @param res the response
*/
function getAppInfos(req, res) {
function getAppInfos(_req: Request, res: Response) {
res.status(200).json(storeApp.getAppInfos());
}
/**
* Init Router.
* @returns {*}
*/
function init() {
export function init() {
router.use(nocache());
router.get('/', getAppInfos);
return router;
}

module.exports = {
init,
};
63 changes: 29 additions & 34 deletions app/api/auth.js → app/api/auth.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
const express = require('express');
const session = require('express-session');
const LokiStore = require('connect-loki')(session);
const passport = require('passport');
const { v5: uuidV5 } = require('uuid');
const getmac = require('getmac').default;
const store = require('../store');
const registry = require('../registry');
const log = require('../log');
const { getVersion } = require('../configuration');

import express, { Request, Response, Express } from 'express';
import session from 'express-session';
import connect from 'connect-loki';
import passport from 'passport';
import { v5 as uuidV5 } from 'uuid';
import getmac from 'getmac';
import * as store from '../store';
import * as registry from '../registry';
import * as states from '../registry/states';
import log from '../log';
import { getVersion } from '../configuration';
import { Authentication, StrategyDescription } from '../authentications/providers/Authentication';

const LokiStore = connect(session);
const router = express.Router();

// The configured strategy ids.
const STRATEGY_IDS = [];
const STRATEGY_IDS: string[] = [];

// Constant WUD namespace for uuid v5 bound sessions.
const WUD_NAMESPACE = 'dee41e92-5fc4-460e-beec-528c9ea7d760';
Expand All @@ -21,22 +24,20 @@ const WUD_NAMESPACE = 'dee41e92-5fc4-460e-beec-528c9ea7d760';
* Get all strategies id.
* @returns {[]}
*/
function getAllIds() {
export function getAllIds() {
return STRATEGY_IDS;
}

/**
* Get cookie max age.
* @param days
* @returns {number}
*/
function getCookieMaxAge(days) {
function getCookieMaxAge(days: number) {
return 3600 * 1000 * 24 * days;
}

/**
* Get session secret key (bound to wud version).
* @returns {string}
*/
function getSessionSecretKey() {
const stringToHash = `wud.${getVersion()}.${getmac()}`;
Expand All @@ -48,23 +49,23 @@ function getSessionSecretKey() {
* @param authentication
* @param app
*/
function useStrategy(authentication, app) {
function useStrategy(authentication: Authentication, app: Express) {
try {
const strategy = authentication.getStrategy(app);
passport.use(authentication.getId(), strategy);
STRATEGY_IDS.push(authentication.getId());
} catch (e) {
} catch (e: any) {
log.warn(
`Unable to apply authentication ${authentication.getId()} (${e.message})`,
);
}
}

function getUniqueStrategies() {
const strategies = Object.values(registry.getState().authentication).map(
const strategies = Object.values(states.getState().authentication).map(
(authentication) => authentication.getStrategyDescription(),
);
const uniqueStrategies = [];
const uniqueStrategies: StrategyDescription[] = [];
strategies.forEach((strategy) => {
if (
!uniqueStrategies.find(
Expand All @@ -83,7 +84,7 @@ function getUniqueStrategies() {
* @param req
* @param res
*/
function getStrategies(req, res) {
function getStrategies(req: Request, res: Response) {
res.json(getUniqueStrategies());
}

Expand All @@ -102,7 +103,7 @@ function getLogoutRedirectUrl() {
* @param req
* @param res
*/
function getUser(req, res) {
function getUser(req: Request, res: Response) {
const user = req.user || { username: 'anonymous' };
res.status(200).json(user);
}
Expand All @@ -112,7 +113,7 @@ function getUser(req, res) {
* @param req
* @param res
*/
function login(req, res) {
function login(req: Request, res: Response) {
return getUser(req, res);
}

Expand All @@ -121,18 +122,17 @@ function login(req, res) {
* @param req
* @param res
*/
function logout(req, res) {
req.logout(() => {});
function logout(req: Request, res: Response) {
req.logout(() => { });
res.status(200).json({
logoutUrl: getLogoutRedirectUrl(),
});
}

/**
* Init auth (passport.js).
* @returns {*}
*/
function init(app) {
export function init(app: Express) {
// Init express session
app.use(
session({
Expand All @@ -155,15 +155,15 @@ function init(app) {
app.use(passport.session());

// Register all authentications
Object.values(registry.getState().authentication).forEach(
Object.values(states.getState().authentication).forEach(
(authentication) => useStrategy(authentication, app),
);

passport.serializeUser((user, done) => {
done(null, JSON.stringify(user));
});

passport.deserializeUser((user, done) => {
passport.deserializeUser<string>((user, done) => {
done(null, JSON.parse(user));
});

Expand All @@ -182,8 +182,3 @@ function init(app) {

app.use('/auth', router);
}

module.exports = {
init,
getAllIds,
};
13 changes: 0 additions & 13 deletions app/api/authentication.js

This file was deleted.

8 changes: 8 additions & 0 deletions app/api/authentication.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import * as component from './component';

/**
* Init Router.
*/
export function init() {
return component.init('authentication');
}
81 changes: 0 additions & 81 deletions app/api/component.js

This file was deleted.

Loading