Files
lstV2/server/services/prodUser/controller/produser.ts

204 lines
6.0 KiB
TypeScript

import axios from "axios";
import { db } from "../../../../database/dbclient.js";
import { prodPermissions } from "../../../../database/schema/prodPermissions.js";
import { tryCatch } from "../../../globalUtils/tryCatch.js";
import { query } from "../../sqlServer/prodSqlServer.js";
import { userCheck } from "../../sqlServer/querys/prodUser/usercheck.js";
import { prodEndpointCreation } from "../../../globalUtils/createUrl.js";
export const prodUser = async (data: any) => {
// get the prodPermissions so we can make sure we have one in here
const { data: prodPerm, error: pe } = await tryCatch(
db.select().from(prodPermissions)
);
// create url
const grantUrl = await prodEndpointCreation(
`/public/v1.0/Administration/User/${data.username}/Grant`
);
const newurl = await prodEndpointCreation(
`/public/v1.0/Administration/User`
);
const revoke = await prodEndpointCreation(
`/public/v1.0/Administration/User/${data.username}/Revoke`
);
if (pe) {
console.log(pe);
return {
success: false,
message: "There was an error getting the base prod permissions",
data: pe,
};
}
// check if we sent over a valid permissions fole over
const permRoleCheck = prodPerm.filter((n: any) => n.name === data.role);
if (permRoleCheck.length === 0) {
return {
success: false,
message: `Role: ${data.role}, dose note exist please check the role you have selected and try again.`,
data: [],
};
}
// dose this user already exist?
const quc = userCheck.replace("[userName]", data.username);
const { data: usercheck, error: userError } = (await tryCatch(
query(quc, "Checks for existing user")
)) as any;
if (userError) {
console.log(userError);
}
//console.log(permRoleCheck);
if (usercheck?.data.length === 0) {
// create the user
const newUser: any = {
userId: data.username,
remark: data.remark,
languageCode: "en",
active: true,
roles: permRoleCheck[0].roles,
rolesLegacy: permRoleCheck[0].rolesLegacy,
};
const { data: newU, error: newE } = (await tryCatch(
axios.post(newurl, newUser, {
headers: {
"X-API-Key": process.env.TEC_API_KEY || "",
"Content-Type": "application/json",
},
})
)) as any;
if (newE) {
console.log(newE);
return {
success: false,
message: `${data.username} encountered an error creating..`,
data: newE.response.data,
};
}
return {
success: true,
message: `${data.username} was just created or updated.`,
data: [],
};
} else {
// revoke and readd
const revokePerms: any = {
roles: JSON.parse(
usercheck.data[0].roles.replaceAll("\\", "\\\\")
) || ["Manufacturing\\IssueMaterial\\MaterialHandler"],
rolesLegacy: JSON.parse(usercheck.data[0].legacyRoles) || [3],
};
const { data: newU, error: newE } = (await tryCatch(
axios.patch(revoke, revokePerms, {
headers: {
"X-API-Key": process.env.TEC_API_KEY || "",
"Content-Type": "application/json",
},
})
)) as any;
if (newE) {
console.log("Revoke failed with: ", newE.response.data);
return {
success: false,
message: `${data.username} encountered an error updating..`,
data: newE.response.data,
};
}
// add the new roles to the user.
const grantRole: any = {
roles: permRoleCheck[0].roles,
rolesLegacy: permRoleCheck[0].rolesLegacy,
};
const { data: grant, error: grante } = (await tryCatch(
axios.patch(grantUrl, grantRole, {
headers: {
"X-API-Key": process.env.TEC_API_KEY || "",
"Content-Type": "application/json",
},
})
)) as any;
if (grante) {
console.log(newE.response.data);
return {
success: false,
message: `${data.username} encountered an error updating..`,
data: newE.response.data,
};
}
}
return {
success: true,
message: `${data.username} was just created or updated.`,
data: [],
};
};
const deleteUser = async (data: any, permRoleCheck: any) => {
const remove = await prodEndpointCreation(
`/public/v1.0/Administration/User/${data.username}`
);
const newurl = await prodEndpointCreation(
`/public/v1.0/Administration/User`
);
const { data: removal, error: grante } = (await tryCatch(
axios.delete(remove, {
headers: {
"X-API-Key": process.env.TEC_API_KEY || "",
"Content-Type": "application/json",
},
})
)) as any;
const newUser: any = {
userId: data.username,
remark: data.remark,
languageCode: "en",
active: true,
roles: permRoleCheck[0].roles,
rolesLegacy: permRoleCheck[0].rolesLegacy,
};
const { data: newU, error: newE } = (await tryCatch(
axios.post(newurl, newUser, {
headers: {
"X-API-Key": process.env.TEC_API_KEY || "",
"Content-Type": "application/json",
},
})
)) as any;
if (newE) {
console.log(newE);
return {
success: false,
message: `${data.username} encountered an error creating..`,
data: newE.response.data,
};
}
return {
success: true,
message: `${data.username} was just created.`,
data: [],
};
};