Fix things for MySQL

This commit is contained in:
rijkvanzanten
2020-07-29 16:13:29 -04:00
parent e94b991a82
commit f28e413b1c
7 changed files with 163 additions and 90 deletions

View File

@@ -50,9 +50,9 @@ const app = express()
.use('/admin', express.static(path.join(__dirname, 'admin')))
.use('/admin/*', (req, res) => res.sendFile(path.join(__dirname, 'admin/index.html')))
.use('/auth', authRouter)
.use(authenticate)
.use('/auth', authRouter)
.use('/activity', activityRouter)
.use('/assets', assetsRouter)
.use('/collections', collectionsRouter)

View File

@@ -9,8 +9,6 @@ import getEmailFromProfile from '../utils/get-email-from-profile';
import { InvalidPayloadException } from '../exceptions/invalid-payload';
import ms from 'ms';
import cookieParser from 'cookie-parser';
import { Action } from '../types';
import ActivityService from '../services/activity';
const router = Router();
@@ -26,7 +24,6 @@ router.post(
const authenticationService = new AuthenticationService({
accountability: req.accountability,
});
const activityService = new ActivityService();
const { error } = loginSchema.validate(req.body);
if (error) throw new InvalidPayloadException(error.message);
@@ -47,16 +44,6 @@ router.post(
}
);
/** @todo move activity creation to AuthService */
await activityService.create({
action: Action.AUTHENTICATE,
collection: 'directus_users',
item: id,
ip: ip,
user_agent: userAgent,
action_by: id,
});
const payload = {
data: { access_token: accessToken, expires },
} as Record<string, Record<string, any>>;
@@ -159,7 +146,6 @@ router.use(grant.express()(getGrantConfig()));
router.get(
'/sso/:provider/callback',
asyncHandler(async (req, res) => {
const activityService = new ActivityService();
const authenticationService = new AuthenticationService({
accountability: req.accountability,
});
@@ -170,18 +156,6 @@ router.get(
email
);
const ip = req.ip;
const userAgent = req.get('user-agent');
await activityService.create({
action: Action.AUTHENTICATE,
collection: 'directus_users',
item: id,
ip: ip,
user_agent: userAgent,
action_by: id,
});
return res.status(200).json({
data: { access_token: accessToken, refresh_token: refreshToken, expires },
});

View File

@@ -4,8 +4,9 @@ import argon2 from 'argon2';
import { nanoid } from 'nanoid';
import ms from 'ms';
import { InvalidCredentialsException } from '../exceptions';
import { Session, Accountability, AbstractServiceOptions } from '../types';
import { Session, Accountability, AbstractServiceOptions, Action } from '../types';
import Knex from 'knex';
import ActivityService from '../services/activity';
type AuthenticateOptions = {
email: string;
@@ -17,10 +18,12 @@ type AuthenticateOptions = {
export default class AuthenticationService {
knex: Knex;
accountability: Accountability | null;
activityService: ActivityService;
constructor(options?: AbstractServiceOptions) {
this.knex = options?.knex || database;
this.accountability = options?.accountability || null;
this.activityService = new ActivityService();
}
/**
@@ -72,6 +75,17 @@ export default class AuthenticationService {
user_agent: userAgent,
});
if (this.accountability) {
await this.activityService.create({
action: Action.AUTHENTICATE,
action_by: user.id,
ip: this.accountability.ip,
user_agent: this.accountability.userAgent,
collection: 'directus_users',
item: user.id,
});
}
return {
accessToken,
refreshToken,

View File

@@ -42,14 +42,10 @@ export default class FieldsService {
fields = (await this.service.readByQuery({})) as Field[];
}
const fieldsQuery = this.knex.select('*').from('directus_fields');
if (collection) {
fieldsQuery.where({ collection });
}
const columns = await schemaInspector.columnInfo(collection);
console.log(columns);
return columns.map((column) => {
const field = fields.find(
(field) => field.field === column.name && field.collection === column.table

View File

@@ -48,6 +48,7 @@ export default class ItemsService implements AbstractService {
accountability: this.accountability,
knex: trx,
});
const authorizationService = new AuthorizationService({
accountability: this.accountability,
knex: trx,