Skip to content
Merged
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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"type": "git",
"url": "https://github.com/PropelAuth/node"
},
"version": "2.1.10",
"version": "2.1.11",
"license": "MIT",
"keywords": [
"auth",
Expand Down
30 changes: 29 additions & 1 deletion src/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export type User = {
metadata?: { [key: string]: any }
properties?: UserProperties
loginMethod: LoginMethod
activeOrgId?: string
}

export class UserClass {
Expand All @@ -27,6 +28,7 @@ export class UserClass {
public username?: string
public properties?: UserProperties
public loginMethod: LoginMethod
public activeOrgId?: string

// If you used our migration APIs to migrate this user from a different system,
// this is their original ID from that system.
Expand All @@ -46,6 +48,18 @@ export class UserClass {
this.impersonatorUserId = user.impersonatorUserId
this.properties = user.properties
this.loginMethod = user.loginMethod
this.activeOrgId = user.activeOrgId
}

public getActiveOrg(): OrgMemberInfo | undefined {
if (!this.activeOrgId) {
return undefined
}
return this.getOrg(this.activeOrgId)
}

public getActiveOrgId(): string | undefined {
return this.activeOrgId
}

public getOrg(orgId: string): OrgMemberInfo | undefined {
Expand Down Expand Up @@ -290,6 +304,7 @@ export type InternalOrgMemberInfo = {
export type InternalUser = {
user_id: string
org_id_to_org_member_info?: { [org_id: string]: InternalOrgMemberInfo }
org_member_info?: InternalOrgMemberInfo

email: string
first_name?: string
Expand All @@ -305,9 +320,22 @@ export type InternalUser = {
}

export function toUser(snake_case: InternalUser): User {
let orgIdToOrgMemberInfo: OrgIdToOrgMemberInfo | undefined
let activeOrgId: string | undefined
if (snake_case.org_member_info) {
orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo({
[snake_case.org_member_info.org_id]: snake_case.org_member_info,
})
activeOrgId = snake_case.org_member_info.org_id
} else {
orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo(snake_case.org_id_to_org_member_info)
activeOrgId = undefined
}

const camelCase: User = {
userId: snake_case.user_id,
orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(snake_case.org_id_to_org_member_info),
orgIdToOrgMemberInfo,
activeOrgId,
email: snake_case.email,
firstName: snake_case.first_name,
lastName: snake_case.last_name,
Expand Down
38 changes: 38 additions & 0 deletions test/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,44 @@ test("toUser converts correctly with orgs", async () => {
expect(toUser(internalUser)).toEqual(user)
})

test("toUser converts correctly with active org", async () => {
const internalUser: InternalUser = {
user_id: "cbf064e2-edaa-4d35-b413-a8d857329c12",
email: "easteregg@propelauth.com",
first_name: "easter",
org_member_info: {
org_id: "99ee1329-e536-4aeb-8e2b-9f56c1b8fe8a",
org_name: "orgA",
org_metadata: { orgdata_a: "orgvalue_a" },
url_safe_org_name: "orga",
user_role: "Owner",
inherited_user_roles_plus_current_role: ["Owner", "Admin", "Member"],
user_permissions: [],
},
}

const user: User = {
userId: "cbf064e2-edaa-4d35-b413-a8d857329c12",
email: "easteregg@propelauth.com",
firstName: "easter",
orgIdToOrgMemberInfo: {
"99ee1329-e536-4aeb-8e2b-9f56c1b8fe8a": new OrgMemberInfo(
"99ee1329-e536-4aeb-8e2b-9f56c1b8fe8a",
"orgA",
{ orgdata_a: "orgvalue_a" },
"orga",
"Owner",
["Owner", "Admin", "Member"],
[]
),
},
loginMethod: { loginMethod: "unknown" },
activeOrgId: "99ee1329-e536-4aeb-8e2b-9f56c1b8fe8a",
}

expect(toUser(internalUser)).toEqual(user)
})

test("toUser converts correctly without orgs", async () => {
const internalUser: InternalUser = {
user_id: "cbf064e2-edaa-4d35-b413-a8d857329c12",
Expand Down