Skip to content
Draft
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
8 changes: 7 additions & 1 deletion client/src/routes/setup/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
let step = 1;
let error: string | null = null;
let orgName: string;
let username: string;
let orgDomain: string;
let orgEmail: string;
let confirmEmail: string;
let password: string;
Expand All @@ -91,7 +93,9 @@
const { data } = await apiClient.post("/admin/setup", {
orgName,
orgEmail,
password
password,
username,
orgDomain
});
didInfo = data;
isDisabled = false;
Expand Down Expand Up @@ -119,6 +123,8 @@
bind:orgName
bind:orgEmail
bind:confirmEmail
bind:username
bind:orgDomain
stepHandler={stepOneHandler}
/>
{:else if step === 2}
Expand Down
16 changes: 16 additions & 0 deletions client/src/routes/setup/steps/step1.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
export let orgName: string;
export let orgEmail: string;
export let confirmEmail: string;
export let username: string;
export let orgDomain: string;

export let stepHandler: (...args: any[]) => any;
</script>
Expand All @@ -30,6 +32,20 @@
bind:value={orgName}
/>
</div>
<div class="text-block">
<Input
label="Admin Username"
placeholder="Enter Admin User Name"
bind:value={username}
/>
</div>
<div class="text-block">
<Input
label="Website Domain"
placeholder="https://organization.org"
bind:value={orgDomain}
/>
</div>
<div class="text-block">
<Input
label="Organization Email"
Expand Down
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ services:
- ./server:/app
- ./logs:/app/logs
- ./identity:/identity
restart: always
depends_on:
- postgres
networks:
Expand Down
2 changes: 1 addition & 1 deletion server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
},
"dependencies": {
"@iota/identity-stronghold-nodejs": "^0.6.0",
"@tanglelabs/identity-manager": "^0.2.3",
"@tanglelabs/identity-manager": "0.2.4",
"bcryptjs": "^2.4.3",
"cookie-parser": "1.4.6",
"cors": "^2.8.5",
Expand Down
12 changes: 8 additions & 4 deletions server/src/controllers/admin.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,12 @@ export const setupOrganization = asyncHandler(async (req: Request, res: Response
})
.catch(async (e) => {
if (e.code !== "ENOENT") throw new Error("400::Config already exists");
const { orgName, password, orgEmail } = req.body;
const { orgName, username, orgDomain, password, orgEmail } = req.body;

const did = await IdentityService.newDid({
alias: "admin-did",
store: {
type: Types.Mongo,

options: {
mongouri: IDENTITY_DB_URI
}
Expand All @@ -88,12 +87,17 @@ export const setupOrganization = asyncHandler(async (req: Request, res: Response
await did.attachEncryptionMethod();

const user = await UsersService.create({
name: orgName,
name: username,
email: orgEmail,
password,
isSuperUser: true
});
await createSettingsJson({ owner: user.id, did: did.getDid().toString() });
await createSettingsJson({
owner: user.id,
did: did.getDid().toString(),
orgName,
orgWebsite: orgDomain
});

res.json({ user, did: did.getDocument() });
});
Expand Down
54 changes: 31 additions & 23 deletions server/src/middleware/auth/auth.middleware.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,43 @@
import { RolesService, SessionsService, UsersService } from "@/services";
import { createJsonWebToken, validateJsonWebToken } from "@/utils";
import { NextFunction, Request, Response } from "express";
import asyncHandler from "express-async-handler";

export const userDeserializer = async (req: Request, res: Response, next: NextFunction) => {
const { accessToken, refreshToken } = req.cookies;
export const userDeserializer = asyncHandler(
async (req: Request, res: Response, next: NextFunction) => {
const { accessToken, refreshToken } = req.cookies;

if (!accessToken && !refreshToken) return next();
if (!accessToken && !refreshToken) return next();

const { payload, expired } = validateJsonWebToken(accessToken);
const { payload, expired } = validateJsonWebToken(accessToken);

if (payload) {
req.session = payload;
req.user = await UsersService.findById(payload.userId, [RolesService.model]);
return next();
}
if (payload) {
req.session = payload;
req.user = await UsersService.findById(payload.userId, [RolesService.model]);
return next();
}

const { payload: refresh } =
!expired && refreshToken ? validateJsonWebToken(refreshToken) : { payload: null };
if (!refresh) return next();

const { payload: refresh } =
!expired && refreshToken ? validateJsonWebToken(refreshToken) : { payload: null };
if (!refresh) return next();
const { id, userId } = await SessionsService.findOne({ id: refresh.sessionId });
try {
const { id, userId } = await SessionsService.findOne({ id: refresh.sessionId });

if (!userId) return next();
const token = createJsonWebToken({ userId, id });
if (!userId || !id) return next();
const token = createJsonWebToken({ userId, id });

res.cookie("accessToken", token, {
maxAge: 60 * 60 * 1000,
httpOnly: true
});
res.cookie("accessToken", token, {
maxAge: 60 * 60 * 1000,
httpOnly: true
});

req.session = validateJsonWebToken(token).payload;
req.user = await UsersService.findById(userId);
req.session = validateJsonWebToken(token).payload;
req.user = await UsersService.findById(userId);

return next();
};
return next();
} catch {
return next();
}
}
);
2 changes: 1 addition & 1 deletion server/src/routers/credential.routers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const router = Router();
* get:
* tags:
* - Credentials
* summary: Edit a specific role
* summary: get a specific credential
* parameters:
* - in: path
* name: id
Expand Down