Finishing touches to publish
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
5
lib/constants/db.ts
Normal file
5
lib/constants/db.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export const DB_HOST = process.env.DB_HOST || 'mongodb';
|
||||
export const DB_PORT = process.env.DB_PORT || 27017;
|
||||
export const DB_USER = process.env.DB_USER || 'test';
|
||||
export const DB_PASS = process.env.DB_PASSWORD || 'test';
|
||||
export const DB_NAME = process.env.DB_NAME || 'auth';
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
export const PACKAGE_NAME = '@mifi/latch';
|
||||
export const PORT = process.env.PORT || 9000;
|
||||
|
||||
5
lib/db/index.ts
Normal file
5
lib/db/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
import { DB_HOST, DB_NAME, DB_PASS, DB_PORT, DB_USER } from '../constants/db';
|
||||
|
||||
export const connection = mongoose.connect(`mongodb://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}`);
|
||||
@@ -6,7 +6,7 @@ import { STRATEGIES } from '../../constants/strategies';
|
||||
import { TokenProps, verify as verifyJwt } from '../../utils/jwt';
|
||||
import { encrypt, verify as verifyPassword } from '../../utils/password';
|
||||
import { generateLoginToken, generateResetToken } from '../../utils/tokens';
|
||||
import { getPasswordResetLink } from '../../utils/links';
|
||||
import { getPasswordResetPath } from '../../utils/links';
|
||||
import { Status } from '../../constants/auth';
|
||||
|
||||
export type Auth = {
|
||||
@@ -42,7 +42,7 @@ export const AuthSchema = new Schema<AuthPrivate, AuthModel, AuthMethods>(
|
||||
{
|
||||
is2FA: { type: Boolean, default: false },
|
||||
record: { type: Types.ObjectId },
|
||||
strategies: { type: Types.ArraySubdocument<Strategy>, required: true },
|
||||
strategies: { type: Array<Strategy>, required: true },
|
||||
status: { type: Number, enum: Object.values(Status), default: Status.UNVERIFIED },
|
||||
username: { type: String, required: true, unique: true },
|
||||
},
|
||||
@@ -69,7 +69,7 @@ AuthSchema.methods = {
|
||||
async getResetLink(route) {
|
||||
const token = await this.getResetToken();
|
||||
if (token) {
|
||||
const resetUrl = getPasswordResetLink(token);
|
||||
const resetUrl = getPasswordResetPath(token);
|
||||
console.log('[sendPasswordReset] resetUrl:', resetUrl);
|
||||
return resetUrl;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import Koa from 'koa';
|
||||
import Router from 'koa-router';
|
||||
import { StatusCodes } from 'http-status-codes';
|
||||
|
||||
import { ROUTE_PREFIX as prefix, RESET_ROUTE } from '../../constants/constants';
|
||||
import { ROUTE_PREFIX as prefix, RESET_ROUTE } from '../../constants/env';
|
||||
import Auth from '../../db/model/auth';
|
||||
import { sign } from '../../utils/jwt';
|
||||
import passport from '../passport';
|
||||
@@ -28,7 +28,7 @@ router.post('/login', async (ctx, next) => {
|
||||
});
|
||||
|
||||
router.post(process.env.RESET_ROUTE || RESET_ROUTE, async (ctx, next) => {
|
||||
const { token = null, password = null } = ctx.request.body as { token?: string, password?: string };
|
||||
const { token = null, password = null } = ctx.request.body as { token?: string; password?: string };
|
||||
if (token && password) {
|
||||
const loginToken = await Auth.resetPassword(token, password).catch();
|
||||
ctx.body({ token: loginToken });
|
||||
@@ -38,9 +38,7 @@ router.post(process.env.RESET_ROUTE || RESET_ROUTE, async (ctx, next) => {
|
||||
});
|
||||
|
||||
router.patch('/:record', (ctx: Koa.Context) => {
|
||||
const data = Auth.findOneAndUpdate(
|
||||
{ record: ctx.params.record },
|
||||
);
|
||||
const data = Auth.findOneAndUpdate({ record: ctx.params.record });
|
||||
if (!data) {
|
||||
ctx.throw(StatusCodes.NOT_FOUND);
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
const DB_USER = process.env.DB_USER || 'test';
|
||||
const DB_PASS = process.env.DB_PASSWORD || 'test';
|
||||
const DB_HOST = process.env.DB_HOST || 'mongodb';
|
||||
const DB_PORT = process.env.DB_PORT || 27017;
|
||||
const DB_NAME = process.env.DB_NAME || 'auth';
|
||||
|
||||
export const connection = mongoose.connect(`${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}`);
|
||||
@@ -1,8 +1,8 @@
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
import app from './app';
|
||||
import { connection } from './database/database.connection';
|
||||
import { PORT } from '../constants/constants';
|
||||
import { connection } from '../db';
|
||||
import { PORT } from '../constants/env';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Middleware } from 'koa';
|
||||
import { LOGIN_ROUTE } from '../../constants/constants';
|
||||
import { LOGIN_ROUTE } from '../../constants/env';
|
||||
|
||||
export const authenticated = (): Middleware => {
|
||||
return (ctx, next) => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import passport from 'koa-passport';
|
||||
|
||||
import Auth from '../../model/auth';
|
||||
import Auth from '../../db/model/auth';
|
||||
import { Auth as AuthRecord } from '../../db/schema/auth';
|
||||
import LocalStrategy from './strategies/local';
|
||||
import JwtStrategy from './strategies/jwt';
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// eslint-disable-next-line import/named
|
||||
import { ExtractJwt, Strategy as JwtStrategy } from 'passport-jwt';
|
||||
|
||||
import Auth from '../../../model/auth';
|
||||
import { getJwtSecret } from '../../../utils/jwt';
|
||||
import Auth from '../../../db/model/auth';
|
||||
import { JWT_SECRET } from '../../../constants/env';
|
||||
|
||||
const opts = {
|
||||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
secretOrKey: getJwtSecret(),
|
||||
secretOrKey: JWT_SECRET,
|
||||
issuer: process.env.JWT_ISSUER,
|
||||
audience: process.env.JWT_AUDIENCE,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// eslint-disable-next-line import/named
|
||||
import { Strategy as LocalStrategy } from 'passport-local';
|
||||
|
||||
import Auth from '../../../model/auth';
|
||||
import Auth from '../../../db/model/auth';
|
||||
|
||||
export default new LocalStrategy(async (username: string, password: string, done: any) => {
|
||||
const user = await Auth.findOne({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import jwt from 'jsonwebtoken';
|
||||
import { JWT_AUDIENCE, JWT_ISSUER, JWT_SECRET } from '../constants/constants';
|
||||
import { JWT_AUDIENCE, JWT_ISSUER, JWT_SECRET } from '../constants/env';
|
||||
export interface TokenProps {
|
||||
aud?: string;
|
||||
exp?: number | Date;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import { RESET_ROUTE, ROUTE_PREFIX } from '../constants/constants';
|
||||
import { RESET_ROUTE, ROUTE_PREFIX } from '../constants/env';
|
||||
|
||||
export const getPasswordResetPath = (token: string) => `${ROUTE_PREFIX}${RESET_ROUTE}?t=${token}`;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import crypto from 'crypto';
|
||||
|
||||
import { sign } from './jwt';
|
||||
import { LOGIN_VALID_TIME, RESET_VALID_MINUTES } from '../constants/constants';
|
||||
import { LOGIN_VALID_TIME, RESET_VALID_MINUTES } from '../constants/env';
|
||||
import { Status } from '../constants/auth';
|
||||
|
||||
const parseLoginValid = () => {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"lint:fix": "eslint --fix --ext .ts,.tsx lib/",
|
||||
"prettier": "prettier --check 'lib/**/*.ts'",
|
||||
"prettier:fix": "prettier --write 'lib/**/*.ts'",
|
||||
"serve": "ts-node src/server.ts",
|
||||
"serve": "node dist/lib/server/index.js",
|
||||
"start": "nodemon",
|
||||
"test": "jest --passWithNoTests"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user