@shi-corp/objectid-converter
Version:
Converts Microsoft Object IDs to and from SIDs.
32 lines (31 loc) • 1.54 kB
JavaScript
import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard";
import { assertGuardEquals } from 'typia';
import { stringify } from 'uuid';
export function convertToObjectId(sid) {
(() => { const __is = (input, _exceptionable = true) => "string" === typeof input; let _errorFactory; return (input, errorFactory) => {
if (false === __is(input)) {
_errorFactory = errorFactory;
((input, _path, _exceptionable = true) => "string" === typeof input || __typia_transform__assertGuard._assertGuard(true, {
method: "assertGuardEquals",
path: _path + "",
expected: "string",
value: input
}, _errorFactory))(input, "$input", true);
}
}; })()(sid);
const sidMatcher = /^S-1-12-1-\d{8,10}-\d{8,10}-\d{8,10}-\d{8,10}$/gum;
if (sid.match(sidMatcher) === null) {
throw new TypeError('The provided SID is not an Entra ID SID!', { 'cause': 'Input validation!' });
}
const splitSid = sid
.replace(/^S-1-12-1-/gum, '')
.split('-')
.map((element) => parseInt(element, 10));
const sidBuffer = new Uint8Array(new Uint32Array(splitSid).buffer);
[sidBuffer[0], sidBuffer[3]] = [sidBuffer[3], sidBuffer[0]];
[sidBuffer[1], sidBuffer[2]] = [sidBuffer[2], sidBuffer[1]];
[sidBuffer[5], sidBuffer[4]] = [sidBuffer[4], sidBuffer[5]];
[sidBuffer[7], sidBuffer[6]] = [sidBuffer[6], sidBuffer[7]];
const objectId = stringify(sidBuffer);
return objectId;
}