@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
509 lines • 26.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IsUserMemberOfGroup = exports.GetCurrentUserADGroupMemberships = exports.GroupIncludesAllUsers = exports.SetGroupOwner = exports.RemoveUserFromGroup = exports.AddUserToGroup = exports.CreateSiteGroup = exports.GetInfoFromSPPeoplePickerControlFormEntity = exports.GetSiteGroups = exports.GetGroupByNameSync = exports.GetGroupByName = exports.GetGroupSync = exports.GetGroup = exports.GetSecurityGroupByTitleSync = exports.GetSecurityGroupByTitle = exports.GetOrEnsureUserByLoginSync = exports.EnsureUserSync = exports.EnsureUser = exports.GetUserByLoginSync = exports.GetUserByLogin = exports.GetUserSync = exports.GetUser = exports.GetCurrentUserSync = exports.GetCurrentUser = exports.GetUserLoginNameSync = exports.GetUserLoginName = void 0;
const exports_index_1 = require("../../exports-index");
const json_1 = require("../../helpers/json");
const sharepoint_1 = require("../../helpers/sharepoint");
const typecheckers_1 = require("../../helpers/typecheckers");
const url_1 = require("../../helpers/url");
const rest_types_1 = require("../../types/rest.types");
const sharepoint_types_1 = require("../../types/sharepoint.types");
const consolelogger_1 = require("../consolelogger");
const rest_1 = require("../rest");
const common_1 = require("./common");
const web_1 = require("./web");
const logger = consolelogger_1.ConsoleLogger.get("utils/sharepoint/user");
var __currentUserId = null;
const groupSelect = "Id,Title,Description,CanCurrentUserViewMembership,OnlyAllowMembersViewMembership,IsHiddenInUI,OwnerTitle";
const userSelect = "PrincipalType,Id,LoginName,UserPrincipalName,Title,IsSiteAdmin,Email";
/** Get user login name */
function GetUserLoginName(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if (typeof (_spPageContextInfo) !== "undefined" && typeof (_spPageContextInfo.userPrincipalName) !== "undefined")
//issue 6309 _spPageContextInfo.userLoginName is wrong for external users
return Promise.resolve(_spPageContextInfo.userPrincipalName);
return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/currentUser/loginName", null, { ...rest_1.longLocalCache })
.then(r => r.d.LoginName)
.catch(() => null);
}
exports.GetUserLoginName = GetUserLoginName;
/** Get user login name syncronously */
function GetUserLoginNameSync(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if (typeof (_spPageContextInfo) !== "undefined" && typeof (_spPageContextInfo.userPrincipalName) !== "undefined")
//issue 6309 _spPageContextInfo.userLoginName is wrong for external users
return _spPageContextInfo.userPrincipalName;
let res = (0, rest_1.GetJsonSync)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/currentUser/loginName", null, { ...rest_1.longLocalCache });
if (res.success)
return res.result.d.LoginName;
else
return null;
}
exports.GetUserLoginNameSync = GetUserLoginNameSync;
function _getCurrentUserRequestUrl(siteUrl, expandGroups) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/currentUser${expandGroups ? '?$expand=Groups' : ''}`;
return url;
}
async function GetCurrentUser(siteUrl, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, rest_1.GetJson)(_getCurrentUserRequestUrl(siteUrl, options && options.expandGroups), null, {
...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: !options || options.refreshCache !== true
})
.then(user => {
if (user)
__currentUserId = user.Id;
return user;
})
.catch(() => null);
}
exports.GetCurrentUser = GetCurrentUser;
function GetCurrentUserSync(siteUrl, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let res = (0, rest_1.GetJsonSync)(_getCurrentUserRequestUrl(siteUrl, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (res.success) {
let user = res.result;
if (user)
__currentUserId = user.Id;
return user;
}
else
return null;
}
exports.GetCurrentUserSync = GetCurrentUserSync;
function _getUserRequestUrl(siteUrl, userId, expandGroups) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/GetUserById(${userId})${expandGroups ? '?expand=Groups' : ''}`;
return url;
}
async function GetUser(siteUrl, userId, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrNaN)(userId) || __currentUserId === userId)
return GetCurrentUser(siteUrl, options);
return (0, rest_1.GetJson)(_getUserRequestUrl(siteUrl, userId, options && options.expandGroups), null, {
...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata
}).then(user => {
return user;
}).catch(() => null);
}
exports.GetUser = GetUser;
function GetUserSync(siteUrl, userId, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrNaN)(userId) || __currentUserId === userId)
return GetCurrentUserSync(siteUrl, options);
let res = (0, rest_1.GetJsonSync)(_getUserRequestUrl(siteUrl, userId, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (res.success) {
let user = res.result;
return user;
}
else
return null;
}
exports.GetUserSync = GetUserSync;
function _getUserByLoginNameRequestUrl(siteUrl, loginName, expandGroups) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteUsers/getByLoginName(@u)?@u='${(0, url_1.encodeURIComponentEX)(loginName, { singleQuoteMultiplier: 2 })}'${expandGroups ? '&expand=Groups' : ''}`;
return url;
}
async function GetUserByLogin(siteUrl, loginName, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(loginName)) {
return GetCurrentUser(siteUrl, options);
}
return (0, rest_1.GetJson)(_getUserByLoginNameRequestUrl(siteUrl, loginName, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata })
.then(user => user)
.catch(() => null);
}
exports.GetUserByLogin = GetUserByLogin;
function GetUserByLoginSync(siteUrl, loginName, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(loginName)) {
return GetCurrentUserSync(siteUrl, options);
}
let res = (0, rest_1.GetJsonSync)(_getUserByLoginNameRequestUrl(siteUrl, loginName, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (res.success) {
let user = res.result;
return user;
}
return null;
}
exports.GetUserByLoginSync = GetUserByLoginSync;
function _getEnsureUserRequestUrl(siteUrl, loginName, expandGroups) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/ensureUser(@u)?@u='${(0, url_1.encodeURIComponentEX)(loginName, { singleQuoteMultiplier: 2 })}'${expandGroups ? '&expand=Groups' : ''}`;
return url;
}
async function EnsureUser(siteUrl, userLogin, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(userLogin))
return null;
return (0, rest_1.GetJson)(_getEnsureUserRequestUrl(siteUrl, userLogin, options && options.expandGroups), null, { method: "POST", spWebUrl: siteUrl, jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache })
.then(user => {
return user;
})
.catch(() => null);
}
exports.EnsureUser = EnsureUser;
function EnsureUserSync(siteUrl, userLogin, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
if ((0, typecheckers_1.isNullOrEmptyString)(userLogin))
return null;
let res = (0, rest_1.GetJsonSync)(_getEnsureUserRequestUrl(siteUrl, userLogin, options && options.expandGroups), null, { method: "POST", spWebUrl: siteUrl, jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache });
if (res.success) {
let user = res.result;
return user;
}
return null;
}
exports.EnsureUserSync = EnsureUserSync;
function GetOrEnsureUserByLoginSync(siteUrl, key, options) {
let userValue = GetUserByLoginSync(siteUrl, key, options);
if (!userValue) {
userValue = EnsureUserSync(siteUrl, key, options);
}
return userValue;
}
exports.GetOrEnsureUserByLoginSync = GetOrEnsureUserByLoginSync;
async function GetSecurityGroupByTitle(siteUrl, title) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
//on premise the title/name of security group could be as domain login
//for example, 'KWIZCOM\ad_qa_group'
//split[0] = will contain the domain name (KWIZCOM)
//split[1] = will contain the title (ad_qa_group)
//if split[1] is null, then we didn't get a domain login and the split[0] will just contain the title/name (ad_qa_group) of the group
var split = title.split("\\");
var groupTitle = (split[1] || split[0]).toLowerCase();
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteusers?$filter=PrincipalType eq ${sharepoint_types_1.PrincipalType.SecurityGroup}`;
return (0, rest_1.GetJson)(url, null, { method: "GET", jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache })
.then(securityGroupsResult => {
var securityGroup = null;
if (securityGroupsResult && securityGroupsResult.value && securityGroupsResult.value.length) {
//first match the full title and fall back to the split title/name
securityGroup = securityGroupsResult.value.filter((secGroup) => {
//this will find security groups on premise where the title/name are saved as 'KWIZCOM\ad_qa_group'
//but will not match when exporting from on premise to online
return secGroup.Title.toLowerCase() === title.toLowerCase();
})[0] || securityGroupsResult.value.filter((secGroup) => {
//this will match settings exported from on premise to online where the title/name of the group changes from 'KWIZCOM\ad_qa_group' to 'AD_QA_GROUP'
return secGroup.Title.toLowerCase() === groupTitle;
})[0];
}
return securityGroup;
})
.catch(() => null);
}
exports.GetSecurityGroupByTitle = GetSecurityGroupByTitle;
function GetSecurityGroupByTitleSync(siteUrl, title) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
//on premise the title/name of security group could be as domain login
//for example, 'KWIZCOM\ad_qa_group'
//split[0] = will contain the domain name (KWIZCOM)
//split[1] = will contain the title (ad_qa_group)
//if split[1] is null, then we didn't get a domain login and the split[0] will just contain the title/name (ad_qa_group) of the group
var split = title.split("\\");
var groupTitle = (split[1] || split[0]).toLowerCase();
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteusers?$filter=PrincipalType eq ${sharepoint_types_1.PrincipalType.SecurityGroup}`;
let securityGroupsResult = (0, rest_1.GetJsonSync)(url, null, { method: "GET", jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache });
if (securityGroupsResult && securityGroupsResult.success) {
var securityGroup = null;
if (securityGroupsResult && securityGroupsResult.result && securityGroupsResult.result.value && securityGroupsResult.result.value.length) {
//first match the full title and fall back to the split title/name
securityGroup = securityGroupsResult.result.value.filter((secGroup) => {
//this will find security groups on premise where the title/name are saved as 'KWIZCOM\ad_qa_group'
//but will not match when exporting from on premise to online
return secGroup.Title.toLowerCase() === title.toLowerCase();
})[0] || securityGroupsResult.result.value.filter((secGroup) => {
//this will match settings exported from on premise to online where the title/name of the group changes from 'KWIZCOM\ad_qa_group' to 'AD_QA_GROUP'
return secGroup.Title.toLowerCase() === groupTitle;
})[0];
}
return securityGroup;
}
return null;
}
exports.GetSecurityGroupByTitleSync = GetSecurityGroupByTitleSync;
function _getGroupRequestUrl(siteUrl, groupId) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById(${groupId})?$select=${groupSelect}`;
return url;
}
function _getGroupUsersRequestUrl(siteUrl, groupId) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById(${groupId})/Users?$select=${userSelect}`;
return url;
}
async function GetGroup(siteUrl, groupId, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
return (0, rest_1.GetJson)(_getGroupRequestUrl(siteUrl, groupId), null, {
...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: !options || options.refreshCache !== true
})
.then(async (group) => {
if (group) {
group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup;
group.LoginName = group.Title;
if (options && options.expandUsers && group.CanCurrentUserViewMembership) {
let users = await (0, rest_1.GetJson)(_getGroupUsersRequestUrl(siteUrl, groupId), null, {
...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: !options || options.refreshCache !== true
});
group.Users = users && users.value;
}
}
return group;
})
.catch(() => null);
}
exports.GetGroup = GetGroup;
function GetGroupSync(siteUrl, groupId, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let res = (0, rest_1.GetJsonSync)(_getGroupRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (res.success) {
let group = res.result;
if (group) {
group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup;
group.LoginName = group.Title;
if (options && options.expandUsers && group.CanCurrentUserViewMembership) {
let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
group.Users = users.success && users.result && users.result.value;
}
}
return group;
}
else
return null;
}
exports.GetGroupSync = GetGroupSync;
function _getGroupsRequestUrl(siteUrl) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups?$select=${groupSelect}`;
return url;
}
function _getGroupByNameRequestUrl(siteUrl, groupName) {
var url = `${_getGroupsRequestUrl(siteUrl)}&$filter=LoginName eq '${(0, url_1.encodeURIComponentEX)(groupName, { singleQuoteMultiplier: 2 })}'`;
return url;
}
async function GetGroupByName(siteUrl, groupName, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let res = await (0, rest_1.GetJson)(_getGroupByNameRequestUrl(siteUrl, groupName), null, { ...rest_1.shortLocalCache, allowCache: !options || options.refreshCache !== true });
if (res) {
let group = res && res.d && res.d.results && res.d.results[0];
if (group) {
group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup;
group.LoginName = group.Title;
if (options && options.expandUsers && group.CanCurrentUserViewMembership) {
let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, group.Id), null, {
...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata,
allowCache: !options || options.refreshCache !== true
});
group.Users = users.success && users.result && users.result.value;
}
}
return group;
}
else
return null;
}
exports.GetGroupByName = GetGroupByName;
function GetGroupByNameSync(siteUrl, groupName, options) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let res = (0, rest_1.GetJsonSync)(_getGroupByNameRequestUrl(siteUrl, groupName), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
if (res.success) {
let group = res.result && res.result.value && res.result.value[0];
if (group) {
group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup;
group.LoginName = group.Title;
if (options && options.expandUsers && group.CanCurrentUserViewMembership) {
let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, group.Id), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata });
group.Users = users.success && users.result && users.result.value;
}
}
return group;
}
else
return null;
}
exports.GetGroupByNameSync = GetGroupByNameSync;
async function GetSiteGroups(siteUrl, refreshCache) {
siteUrl = (0, common_1.GetSiteUrl)(siteUrl);
let res = await (0, rest_1.GetJson)(_getGroupsRequestUrl(siteUrl), null, { ...rest_1.shortLocalCache, allowCache: refreshCache !== true });
if (res) {
let groups = res && res.d && res.d.results || [];
groups.forEach(g => {
g.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup;
g.LoginName = g.Title;
});
return groups;
}
else
return [];
}
exports.GetSiteGroups = GetSiteGroups;
function GetInfoFromSPPeoplePickerControlFormEntity(entity) {
if ((0, sharepoint_1.IsSPPeoplePickerControlFormEntity)(entity)) {
var principalType = (0, sharepoint_1.getPrincipalTypeFromPickerEntity)(entity);
if ((0, typecheckers_1.isNullOrUndefined)(principalType)) {
let userValue = GetOrEnsureUserByLoginSync(null, entity.Key);
if (userValue) {
return userValue;
}
let groupValue = GetGroupByNameSync(null, entity.Key);
if (groupValue) {
return groupValue;
}
}
else if (principalType === sharepoint_types_1.PrincipalType.SharePointGroup) {
return GetGroupByNameSync(null, entity.Key);
}
else {
return GetOrEnsureUserByLoginSync(null, entity.Key);
}
}
return null;
}
exports.GetInfoFromSPPeoplePickerControlFormEntity = GetInfoFromSPPeoplePickerControlFormEntity;
async function CreateSiteGroup(siteUrl, info) {
let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups`;
let createGroup = await (0, rest_1.GetJson)(url, (0, json_1.jsonStringify)({
__metadata: {
type: "SP.Group"
},
Title: info.name,
Description: info.description
}), { allowCache: false });
return createGroup.d;
}
exports.CreateSiteGroup = CreateSiteGroup;
async function AddUserToGroup(siteUrl, groupId, userIdOrLogin) {
let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups(${groupId})/users`;
if ((0, typecheckers_1.isNumber)(userIdOrLogin)) {
let ensured = await GetUser(siteUrl, userIdOrLogin);
userIdOrLogin = ensured.LoginName;
}
await (0, rest_1.GetJson)(url, (0, json_1.jsonStringify)({
LoginName: userIdOrLogin
}), { allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata });
}
exports.AddUserToGroup = AddUserToGroup;
async function RemoveUserFromGroup(siteUrl, groupId, userId) {
let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups(${groupId})/users/removeById(${userId})`;
await (0, rest_1.GetJson)(url, null, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata });
}
exports.RemoveUserFromGroup = RemoveUserFromGroup;
async function SetGroupOwner(siteUrl, groupId, ownerId, ownerIsAGroup) {
//https://github.com/SharePoint/sp-dev-docs/issues/5031#issuecomment-594710013
//if owner is a group - rest API doens't work.
if (ownerIsAGroup !== true) {
let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById('${groupId}')/SetUserAsOwner(${ownerId})`;
try {
await (0, rest_1.GetJson)(url, null, { jsonMetadata: rest_types_1.jsonTypes.nometadata, method: "POST" });
return true;
}
catch (e) {
logger.error(`SetGroupOwner ${groupId} ${ownerId} error:`);
logger.error(e);
return false;
}
}
else {
try {
let soapUrl = `${(0, common_1.GetSiteUrl)(siteUrl)}_vti_bin/client.svc/ProcessQuery`;
let siteId = await (0, web_1.GetSiteId)(siteUrl);
let serviceJSONResponse = await (0, rest_1.GetJson)(soapUrl, `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName=".NET Library" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009">
<Actions>
<SetProperty Id="1" ObjectPathId="2" Name="Owner">
<Parameter ObjectPathId="3" />
</SetProperty>
<Method Name="Update" Id="4" ObjectPathId="2" />
</Actions>
<ObjectPaths>
<Identity Id="2" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:${siteId}:g:${groupId}" />
<Identity Id="3" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:${siteId}:g:${ownerId}" />
</ObjectPaths>
</Request>`, {
headers: {
Accept: rest_types_1.jsonTypes.standard,
"content-type": rest_types_1.contentTypes.xml
}
});
//logger.json(serviceJSONResponse, "soap result");
return (0, typecheckers_1.isNullOrEmptyArray)(serviceJSONResponse) || (0, typecheckers_1.isNullOrEmptyString)(serviceJSONResponse[0].ErrorInfo);
}
catch (e) {
logger.error(`SetGroupOwner via SOAP ${ownerId} ${ownerId} error:`);
logger.error(e);
return false;
}
}
}
exports.SetGroupOwner = SetGroupOwner;
async function GroupIncludesAllUsers(siteUrl, groupId) {
try {
if ((0, typecheckers_1.isNullOrNaN)(groupId))
return false;
const groupInfo = await GetGroup(siteUrl, groupId, { expandUsers: true });
if ((0, typecheckers_1.isNullOrUndefined)(groupInfo))
return false;
//special memebr called spo-grid-all-users/{tenant-id} will be added, its not in the AAD or anywhere else.
const includesAllUsers = !(0, typecheckers_1.isNullOrUndefined)((0, exports_index_1.firstOrNull)(groupInfo.Users, u => (u.LoginName || "").indexOf("|spo-grid-all-users/") >= 0));
return includesAllUsers;
}
catch (e) {
logger.error(e);
return false;
}
}
exports.GroupIncludesAllUsers = GroupIncludesAllUsers;
/** return array of AAD group IDs, guid, normalized */
async function GetCurrentUserADGroupMemberships(siteUrl) {
let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/SP.Publishing.SitePageService.GetCurrentUserMemberships`;
try {
let result = await (0, rest_1.GetJson)(url, null, { jsonMetadata: rest_types_1.jsonTypes.nometadata });
return (0, typecheckers_1.isNotEmptyArray)(result.value) ? result.value.map(id => (0, exports_index_1.normalizeGuid)(id)) : [];
}
catch (e) {
logger.error(e);
return [];
}
}
exports.GetCurrentUserADGroupMemberships = GetCurrentUserADGroupMemberships;
/** checks users groups, then checks for groups that contains all users and that the user is not an external one */
async function IsUserMemberOfGroup(siteUrl, user, group) {
if ((0, typecheckers_1.isNotEmptyArray)(user.Groups)) {
//search user groups for the group by title or id
const found = (0, exports_index_1.firstOrNull)(user.Groups, userGroup => ((0, typecheckers_1.isNotEmptyString)(group.LoginName) && userGroup.Title === group.LoginName) || ((0, typecheckers_1.isNumber)(group.Id) && userGroup.Id === group.Id));
if (found)
return true;
}
const groupInfo = await GetGroup(siteUrl, group.Id, { expandUsers: true });
if (!(0, typecheckers_1.isNullOrUndefined)(groupInfo)) {
if ((0, typecheckers_1.isNotEmptyArray)(groupInfo.Users)) {
//search group users memberships directly
const found = (0, exports_index_1.firstOrNull)(groupInfo.Users, groupUser => ((0, typecheckers_1.isNotEmptyString)(user.LoginName) && groupUser.LoginName === user.LoginName) || ((0, typecheckers_1.isNumber)(user.Id) && groupUser.Id === user.Id));
if (found)
return true;
//if we looking for current user - we can check GetCurrentUserADGroupMemberships
let currentUser = await GetCurrentUser(siteUrl);
if (currentUser.LoginName === user.LoginName) {
//get user's aad groups
const UserAADGroups = await GetCurrentUserADGroupMemberships(siteUrl);
if ((0, typecheckers_1.isNotEmptyArray)(UserAADGroups)) {
//convert group's users to guids
const groupUserLoginsSplit = (0, exports_index_1.filterEmptyEntries)(groupInfo.Users.map(u => (0, exports_index_1.lastOrNull)(u.LoginName.split('|'))));
//see if any of the group members is a guid that is in the user's aad groups
const found = (0, exports_index_1.firstOrNull)(groupUserLoginsSplit, u => UserAADGroups.includes((0, exports_index_1.normalizeGuid)(u)));
if (found)
return true;
}
}
}
//groups that contain all-users special permission will not show up in the user's groups or anywhere else - so test manually.
const includesAllUsers = await GroupIncludesAllUsers(siteUrl, group.Id);
const isCurrentUserExternal = (0, sharepoint_1.isExternalUser)(user.LoginName);
return includesAllUsers && !isCurrentUserExternal;
}
return false;
}
exports.IsUserMemberOfGroup = IsUserMemberOfGroup;
//# sourceMappingURL=user.js.map