diff --git a/.gitignore b/.gitignore index e7708249..cb9cfb79 100644 --- a/.gitignore +++ b/.gitignore @@ -316,3 +316,5 @@ build/ nbbuild/ dist/ nbdist/ + +_ide_helper.php diff --git a/CitadelManager/app/FilterList.php b/CitadelManager/app/FilterList.php index ecf63dd6..98afdfda 100644 --- a/CitadelManager/app/FilterList.php +++ b/CitadelManager/app/FilterList.php @@ -41,4 +41,9 @@ public function group() { return $this->belongsToMany('App\Group'); } + + public function getRelativeListPath() + { + return '/' . $this->namespace . '/' . $this->category . '/' . FilterRulesManager::TYPES[$this->type] . '.txt'; + } } diff --git a/CitadelManager/app/Http/Controllers/UserController.php b/CitadelManager/app/Http/Controllers/UserController.php index fbd59456..9e973d53 100644 --- a/CitadelManager/app/Http/Controllers/UserController.php +++ b/CitadelManager/app/Http/Controllers/UserController.php @@ -553,7 +553,6 @@ private function mergeConfigurations($userGroup, $thisUser, $activation) { if ($userGroup->config_cache == null || strlen($userGroup->config_cache) == 0) { $userGroup->rebuildGroupData(); } - $groupConfiguration = json_decode($userGroup->config_cache, true) ?? []; $userConfiguration = json_decode($thisUser->config_override, true) ?? []; @@ -564,6 +563,42 @@ private function mergeConfigurations($userGroup, $thisUser, $activation) { $configuration = array_merge($groupConfiguration, $userConfiguration, $activationConfiguration); + // Merge the category overrides + if (isset($activationConfiguration['CategoryOverrides']) || isset($userConfiguration['CategoryOverrides'])) { + $categoryOverrideArray = $mergedCategoryOverrides = array_merge($userConfiguration['CategoryOverrides'] ?? [], $activationConfiguration['CategoryOverrides'] ?? []); + $mergedCategoryOverrides = array_values(array_reduce($categoryOverrideArray, function($carry, $item) { + $carry[$item['categoryId']] = $item; + return $carry; + }, [])); + foreach ($mergedCategoryOverrides as $categoryOverride) { + $category = FilterList::where('id', $categoryOverride['categoryId'])->first(); + if ($category) { + $path = $category->getRelativeListPath(); + // look for existing category in ConfiguredLists array + $matchIndex = array_search($path, array_column($configuration['ConfiguredLists'], 'RelativeListPath')); + if ($matchIndex !== false) { + if ($categoryOverride['override'] == 'Ignored') { + // remove the category from the ConfiguredLists array + unset($configuration['ConfiguredLists'][$matchIndex]); + $configuration['ConfiguredLists'] = array_values($configuration['ConfiguredLists']); + } else { + // merge the category override into the existing category + $configuration['ConfiguredLists'][$matchIndex]['ListType'] = $categoryOverride['override']; + } + + } else { + // add the category override to the ConfiguredLists array if it's not ignored + if ($categoryOverride['override'] != 'Ignored') { + $configuration['ConfiguredLists'][] = [ + 'ListType' => $categoryOverride['override'], + 'RelativeListPath' => $path + ]; + } + } + } + } + } + /* -------------------------------------------------------------- */ /* Merge the arrays for these keys */ /* -------------------------------------------------------------- */ diff --git a/CitadelManager/public/js/bindings.js.map b/CitadelManager/public/js/bindings.js.map index 202c73ea..47df5fad 100644 --- a/CitadelManager/public/js/bindings.js.map +++ b/CitadelManager/public/js/bindings.js.map @@ -1 +1 @@ -{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../resources/assets/js/bindings.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../resources/assets/js/bindings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/CitadelManager/resources/assets/js/admin/dashboard.ts b/CitadelManager/resources/assets/js/admin/dashboard.ts index 3570615c..3ef5ec5b 100644 --- a/CitadelManager/resources/assets/js/admin/dashboard.ts +++ b/CitadelManager/resources/assets/js/admin/dashboard.ts @@ -750,6 +750,7 @@ namespace Citadel { }; this.m_tableFilterLists = $('#filter_table').DataTable(filterTableSettings); + console.log(this.m_tableFilterLists) }); @@ -1684,7 +1685,7 @@ namespace Citadel { this.ForceTableRedraw(this.m_tableUsers); }); - userRecord.StartEditing(this.m_allGroups, data); + userRecord.StartEditing(this.m_allGroups, this.m_allFilters, data); } break; @@ -1754,7 +1755,7 @@ namespace Citadel { appUserActivationRecord.StopEditing(); this.ForceTableRedraw(this.m_tableActivation); }); - appUserActivationRecord.StartEditing(this.m_allGroups, data); + appUserActivationRecord.StartEditing(this.m_allGroups, this.m_allFilters, data); } break; @@ -1806,7 +1807,7 @@ namespace Citadel { let newUser = new UserRecord(); var usergoup_data = this.m_tableGroups.data(); - newUser.StartEditing(this.m_allGroups, this.m_tableUsers.data()['all_user_roles']); + newUser.StartEditing(this.m_allGroups, this.m_allFilters, this.m_tableUsers.data()['all_user_roles']); newUser.ActionCompleteCallback = ((action: string): void => { newUser.StopEditing(); diff --git a/CitadelManager/resources/assets/js/admin/records/appuseractivationrecord.ts b/CitadelManager/resources/assets/js/admin/records/appuseractivationrecord.ts index ef6e3e59..940a933f 100644 --- a/CitadelManager/resources/assets/js/admin/records/appuseractivationrecord.ts +++ b/CitadelManager/resources/assets/js/admin/records/appuseractivationrecord.ts @@ -30,6 +30,16 @@ namespace Citadel { GET_APP_AUTOSUGGEST_URL = 'api/admin/app_suggest'; URL_ROUTE = 'api/admin/user_activations'; + CATEGORY_OVERRIDES_OPTIONS = [ + '', + 'Whitelist', + 'Blacklist', + 'BypassList', + 'Ignored', + ] + + + // ────────────────────────────────────────────────────── // :::::: APP USER ACTIVATION M E M B E R S :::::: // ────────────────────────────────────────────────────── @@ -47,10 +57,12 @@ namespace Citadel { private m_friendlyName: string; private configOverride: any; + private categoryOverrides: any; private selfModeration: any; private activationWhitelist: any; private triggerBlacklist: any; private appBlocklist: any; + private allCategories: any; // ────────────────────────────────────────────────────────── // :::::: E D I T O R H T M L E L E M E N T S :::::: @@ -78,6 +90,8 @@ namespace Citadel { private m_triggerBlacklistTable: SelfModerationTable; private m_appBlocklistTable: SelfModerationTable; + private m_categoryOverridesTable: any; + private m_btnSubmit: HTMLButtonElement; private m_btnCancel: HTMLButtonElement; @@ -164,6 +178,59 @@ namespace Citadel { this.m_appBlocklistTable.render(); } + private InitCategoryOverridesTable() { + let that = this; + const options = this.CATEGORY_OVERRIDES_OPTIONS; + + let columns = [ + { + title: 'Category', + data: 'categoryName', + visible: true, + }, + { + title: 'Type', + data: 'type', + visible: true, + }, + { + title: 'Override', + data: 'override', + visible: true, + render: function (data, type, row) { + const optionsHtml = options.map((option) => { + const selected = data === option ? 'selected' : ''; + return ``; + }).join(''); + const html = ``; + + + return html; + } + } + ]; + + let settings = { + autoWidth: true, + stateSave: true, + responsive: true, + columns: columns, + data: this.categoryOverrides, + destroy: true, + createdRow: function (row, data, dataIndex) { + const select = $(row).find('.category-override-select')[0] as HTMLSelectElement; + select.addEventListener('change', function () { + data.override = select.value; + }); + }, + }; + + this.m_categoryOverridesTable = $('#activation_category_table').DataTable(settings); + } + + private InitButtonHandlers(): void { let that = this; @@ -240,6 +307,17 @@ namespace Citadel { this.m_timeRestrictionsUI.InitEmptyTimeRestrictionsObject(); this.m_selectUpdateChannel.selectedIndex = 0; } + + if (this.configOverride && this.configOverride.CategoryOverrides) { + // console.log(this.myConfigData.CategoryOverrides) + this.categoryOverrides = this.categoryOverrides.map((category) => { + const categoryOverride = this.configOverride.CategoryOverrides.find((override) => override.categoryId === category.categoryId); + if (categoryOverride) { + category.override = categoryOverride.override; + } + return category; + }); + } } private getValueFromSelect(selectBox: HTMLSelectElement): number { @@ -265,12 +343,17 @@ namespace Citadel { this.triggerBlacklist = this.m_triggerBlacklistTable.getData(); this.appBlocklist = this.m_appBlocklistTable.getData(); + this.categoryOverrides = this.m_categoryOverridesTable.data().toArray(); + this.configOverride = { SelfModeration: this.selfModeration, CustomWhitelist: this.activationWhitelist, CustomTriggerBlacklist: this.triggerBlacklist, - CustomBlockedApps: this.appBlocklist + CustomBlockedApps: this.appBlocklist, + CategoryOverrides: this.categoryOverrides.filter((category) => category.override !== '') }; + + if(this.m_selectUpdateChannel.selectedIndex != 0) { this.configOverride.UpdateChannel = this.m_selectUpdateChannel.options[this.m_selectUpdateChannel.selectedIndex].value; } @@ -287,7 +370,16 @@ namespace Citadel { } } - public StartEditing(allGroups, userData: Object = null): void { + public StartEditing(allGroups, allCategories: Array, userData: Object = null): void { + this.categoryOverrides = allCategories.map((category) => { + return { + categoryId: category.id, + categoryName: category.category, + type: category.type, + override: '', + } + }); + this.LoadFromObject(userData); if (this.m_selectGroup.options != null) { @@ -332,6 +424,7 @@ namespace Citadel { } this.InitSelfModerationTables(); + this.InitCategoryOverridesTable(); // Covers creation of new users, because this doesn't get assigned to in that circumstance. if (!this.m_timeRestrictionsUI.timeRestrictions) { this.m_timeRestrictionsUI.InitEmptyTimeRestrictionsObject(); diff --git a/CitadelManager/resources/assets/js/admin/records/userrecord.ts b/CitadelManager/resources/assets/js/admin/records/userrecord.ts index d05507b6..544acab6 100644 --- a/CitadelManager/resources/assets/js/admin/records/userrecord.ts +++ b/CitadelManager/resources/assets/js/admin/records/userrecord.ts @@ -294,6 +294,14 @@ namespace Citadel { URL_REFRESH_ACTIVATIONS = 'api/admin/user/{user_id}/activations'; URL_GET_APP_AUTOSUGGEST = 'api/admin/app_suggest'; + CATEGORY_OVERRIDES_OPTIONS = [ + '', + 'Whitelist', + 'Blacklist', + 'BypassList', + 'Ignored', + ] + // ─────────────────────────────────────────────────── // :::::: U S E R D A T A M E M B E R S :::::: @@ -348,12 +356,14 @@ namespace Citadel { private activationData: any[]; private myConfigData: any; + private categoryOverrides: any; private selfModeration: any; private customWhitelist: any; private customBypasslist: any; private customTriggers: any; private appBlocklist: any; private allGroups: any; + private allCategories: any; private isDnsDisabled: any; // ───────────────────────────────────────────────── @@ -372,6 +382,8 @@ namespace Citadel { private m_textTriggerTable: SelfModerationTable; private m_appBlocklistTable: SelfModerationTable; + private m_categoryOverridesTable: any; + private m_timeRestrictionsUI: TimeRestrictionUI private userData: any; @@ -516,6 +528,7 @@ namespace Citadel { this.activationData = data['activations']; this.myConfigData = data['config_override'] == null ? null : JSON.parse(data['config_override']); + if (this.myConfigData) { this.m_numBypassesPermitted = this.myConfigData.BypassesPermitted; this.m_bypassDuration = this.myConfigData.BypassDuration; @@ -566,6 +579,17 @@ namespace Citadel { } else { this.m_timeRestrictionsUI.InitEmptyTimeRestrictionsObject(); } + + if (this.myConfigData && this.myConfigData.CategoryOverrides) { + // console.log(this.myConfigData.CategoryOverrides) + this.categoryOverrides = this.categoryOverrides.map((category) => { + const categoryOverride = this.myConfigData.CategoryOverrides.find((override) => override.categoryId === category.categoryId); + if (categoryOverride) { + category.override = categoryOverride.override; + } + return category; + }); + } } private eveningRestrictionsPreset(): void { @@ -581,7 +605,6 @@ namespace Citadel { } protected LoadFromForm(): void { - console.log(this.m_fullName); this.m_groupId = this.getValueFromSelect(this.m_selectGroup); this.m_roleId = this.getValueFromSelect(this.m_selectRole); this.m_customerId = this.m_inputCustomerId.value == "" ? null : this.m_inputCustomerId.valueAsNumber; @@ -595,6 +618,8 @@ namespace Citadel { this.customTriggers = this.m_textTriggerTable.getData(); this.appBlocklist = this.m_appBlocklistTable.getData(); + this.categoryOverrides = this.m_categoryOverridesTable.data().toArray(); + this.myConfigData = this.myConfigData || {}; this.myConfigData.SelfModeration = this.selfModeration; @@ -603,6 +628,8 @@ namespace Citadel { this.myConfigData.CustomTriggerBlacklist = this.customTriggers; this.myConfigData.CustomBlockedApps = this.appBlocklist; + this.myConfigData.CategoryOverrides = this.categoryOverrides.filter((category) => category.override !== ''); + this.myConfigData.TimeRestrictions = {}; for (var day in this.m_timeRestrictionsUI.timeRestrictions) { var slider = this.m_timeRestrictionsUI.timeRestrictionSliders[day]; @@ -780,11 +807,12 @@ namespace Citadel { let that = this; let id = (this.m_id === undefined) ? 0 : this.m_id; - this.m_tableColumns = [{ - title: 'Action Id', - data: 'id', - visible: false - }, + this.m_tableColumns = [ + { + title: 'Action Id', + data: 'id', + visible: false + }, { title: 'Identifier', data: 'identifier', @@ -943,7 +971,7 @@ namespace Citadel { var data = that.getActivationById(id); - appUserActivationRecord.StartEditing(that.allGroups, data); + appUserActivationRecord.StartEditing(that.allGroups, that.allCategories, data); }); $("#user_activation_table").off("click", "button.btn-delete"); @@ -1008,6 +1036,58 @@ namespace Citadel { this.m_ActivationTables = $('#user_activation_table').DataTable(this.m_tableSettings); } + private InitCategoryOverridesTable() { + let that = this; + const options = this.CATEGORY_OVERRIDES_OPTIONS; + + let columns = [ + { + title: 'Category', + data: 'categoryName', + visible: true, + }, + { + title: 'Type', + data: 'type', + visible: true, + }, + { + title: 'Override', + data: 'override', + visible: true, + render: function (data, type, row) { + const optionsHtml = options.map((option) => { + const selected = data === option ? 'selected' : ''; + return ``; + }).join(''); + const html = ``; + + + return html; + } + } + ]; + + let settings = { + autoWidth: true, + stateSave: true, + responsive: true, + columns: columns, + data: this.categoryOverrides, + destroy: true, + createdRow: function (row, data, dataIndex) { + const select = $(row).find('.category-override-select')[0] as HTMLSelectElement; + select.addEventListener('change', function () { + data.override = select.value; + }); + }, + }; + + this.m_categoryOverridesTable = $('#user_category_table').DataTable(settings); + } + public cancelClick(e: MouseEvent): any { if (this.m_actionCompleteCallback != null) { this.m_actionCompleteCallback("Cancel"); @@ -1018,8 +1098,17 @@ namespace Citadel { return false; } - public StartEditing(allGroups, userData: Object = null): void { + public StartEditing(allGroups, allCategories, userData: Object = null): void { this.allGroups = allGroups; + this.allCategories = allCategories; + this.categoryOverrides = allCategories.map((category) => { + return { + categoryId: category.id, + categoryName: category.category, + type: category.type, + override: '', + } + }); if (this.m_selectGroup.options != null) { this.m_selectGroup.options.length = 0; @@ -1106,6 +1195,7 @@ namespace Citadel { } this.InitUserActivationTables(); + this.InitCategoryOverridesTable(); this.InitSelfModerationTable(); this.m_timeRestrictionsUI.InitTimeRestrictions(); diff --git a/CitadelManager/resources/views/layouts/components/appuseractivationeditor.blade.php b/CitadelManager/resources/views/layouts/components/appuseractivationeditor.blade.php index f09f0c69..dde8f922 100644 --- a/CitadelManager/resources/views/layouts/components/appuseractivationeditor.blade.php +++ b/CitadelManager/resources/views/layouts/components/appuseractivationeditor.blade.php @@ -18,6 +18,9 @@