Skip to content

Commit

Permalink
Merge branch 'KelvinTegelaar:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
luke255 authored Jul 16, 2024
2 parents b2eaceb + 498e5ec commit 2df0a1a
Show file tree
Hide file tree
Showing 33 changed files with 2,320 additions and 267 deletions.
6 changes: 1 addition & 5 deletions .github/workflows/dev_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@ on:
push:
branches:
- dev
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- dev

jobs:
build_and_deploy_job:
if: github.event.repository.fork == false && github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
if: github.event.repository.fork == false && github.event_name == 'push'
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
Expand Down
3 changes: 2 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"eg2.vscode-npm-script",
"christian-kohler.npm-intellisense",
"esbenp.prettier-vscode",
"stylelint.vscode-stylelint"
"stylelint.vscode-stylelint",
"editorconfig.editorconfig"
]
}
21 changes: 6 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
![CyberDrain Light](github_assets/img/CIPP.png#gh-dark-mode-only)
![CyberDrain Dark](github_assets/img/CIPP-Light.png#gh-light-mode-only)

<center><h1>Sponsored by</h1></center>
<p align="center">

![OIT](github_assets/img/oitpsonsor_light.png)&nbsp;&nbsp;&nbsp;&nbsp;
![Immybot](github_assets/img/Immybot.png)&nbsp;&nbsp;&nbsp;&nbsp;
![NinjaOne](github_assets/img/NinjaOne-Light.png#gh-dark-mode-only)
![NinjaOne](github_assets/img/NinjaOne-Dark.png#gh-light-mode-only)&nbsp;&nbsp;&nbsp;&nbsp;
![Huntress](github_assets/img/Huntress.png)
![HaloPSA](github_assets/img/halopsa-red-grey.svg)

</p>

# What is this?

The CyberDrain Improved Partner Portal is a portal to help manage administration for Microsoft Partners. The current Microsoft partner landscape makes it fairly hard to manage multi tenant situations, with loads of manual work. Microsoft Lighthouse might resolve this in the future but development of this is lagging far behind development of the current market for Microsoft Partners.
The CyberDrain Improved Partner Portal is a portal to help manage administration for Microsoft Partners. The current Microsoft partner landscape makes it fairly hard to manage multi tenant situations, with loads of manual work. Microsoft Lighthouse might resolve this in the future but development of this is lagging far behind development of the current market for Microsoft Partners.
This project is a way to help you with administration, with user management, and deploying your own preferred standards. It's not a replacement for security tools, or a way to cut costs on specific subscriptions. The tool should assist you in removing the gripes with standard partner management and save you several hours per engineer per month.
For more information, we recommend checking out our website [here](https://cipp.app)
For detailed documentation about features of CIPP, please check out our [documentation.](https://docs.cipp.app)

This project is a way to help you with administration, with user management, and deploying your own preferred standards. It's not a replacement for security tools, or a way to cut costs on specific subscriptions. The tool should assist you in removing the gripes with standard partner management and save you several hours per engineer per month.
# Our sponsors

for more information, we recommend checking out our website [here](https://cipp.app)
You can find our sponsors [here.](https://docs.cipp.app/#our-sponsors)
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cipp",
"version": "5.9.3",
"version": "6.0.2",
"description": "The CyberDrain Improved Partner Portal is a portal to help manage administration for Microsoft Partners.",
"homepage": "https://cipp.app/",
"bugs": {
Expand Down
2 changes: 1 addition & 1 deletion public/version_latest.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.9.3
6.0.2
35 changes: 35 additions & 0 deletions src/_nav.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
faUserShield,
faEnvelope,
faToolbox,
faDownload,
} from '@fortawesome/free-solid-svg-icons'

const _nav = [
Expand Down Expand Up @@ -162,6 +163,11 @@ const _nav = [
name: 'App Consent Requests',
to: '/tenant/administration/app-consent-requests',
},
{
component: CNavItem,
name: 'Authentication Methods',
to: '/tenant/administration/authentication-methods',
},
{
component: CNavItem,
name: 'Tenant Onboarding',
Expand All @@ -179,6 +185,25 @@ const _nav = [
},
],
},
{
component: CNavGroup,
name: 'Configuration Backup',
section: 'Tenant Administration',
to: '/cipp/gdap',
icon: <FontAwesomeIcon icon={faDownload} className="nav-icon" />,
items: [
{
component: CNavItem,
name: 'Backup Wizard',
to: '/tenant/backup/backup-wizard',
},
{
component: CNavItem,
name: 'Restore Wizard',
to: '/tenant/backup/restore-wizard',
},
],
},
{
component: CNavGroup,
name: 'Tools',
Expand Down Expand Up @@ -608,6 +633,11 @@ const _nav = [
name: 'Mailboxes',
to: '/email/administration/mailboxes',
},
{
component: CNavItem,
name: 'Deleted Mailboxes',
to: '/email/administration/deleted-mailboxes',
},
{
component: CNavItem,
name: 'Mailbox Rules',
Expand Down Expand Up @@ -791,6 +821,11 @@ const _nav = [
name: 'Extensions Settings',
to: '/cipp/extensions',
},
{
component: CNavItem,
name: 'Extension Sync',
to: '/cipp/extension-sync',
},
{
component: CNavItem,
name: 'User Settings',
Expand Down
4 changes: 3 additions & 1 deletion src/components/contentcards/CippButtonCard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ export default function CippButtonCard({
CardButton,
children,
isFetching,
className = 'h-100',
}) {
return (
<CCard className="h-100 mb-3">
<CCard className={`${className} mb-3`}>
<CCardHeader>
<CCardTitle>
{titleType === 'big' ? <h3 className="underline mb-3">{title}</h3> : title}
Expand All @@ -32,4 +33,5 @@ CippButtonCard.propTypes = {
CardButton: PropTypes.element.isRequired,
children: PropTypes.element.isRequired,
isFetching: PropTypes.bool.isRequired,
className: PropTypes.string,
}
24 changes: 24 additions & 0 deletions src/components/tables/CellBytes.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import PropTypes from 'prop-types'

export function CellBytes({ cell }) {
return (cell / 1024 ** 3).toFixed(2)
}

CellBytes.propTypes = {
propName: PropTypes.string,
cell: PropTypes.object,
}

export function CellBytesToPercentage({ row, value, dividedBy }) {
return Math.round((row[value] / row[dividedBy]) * 100 * 10) / 10
}

CellBytesToPercentage.propTypes = {
propName: PropTypes.string,
cell: PropTypes.object,
}

export const cellBytesFormatter = () => (row, index, column, id) => {
const cell = column.selector(row)
return CellBytes({ cell })
}
16 changes: 16 additions & 0 deletions src/components/tables/CellCopyButton.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import PropTypes from 'prop-types'
import CippCopyToClipboard from '../utilities/CippCopyToClipboard'

export function CellCopyButton({ cell }) {
return <CippCopyToClipboard text={cell} />
}

CellCopyButton.propTypes = {
propName: PropTypes.string,
cell: PropTypes.object,
}

export const cellCopyButtonFormatter = () => (row, index, column, id) => {
const cell = column.selector(row)
return CellCopyButton({ cell })
}
12 changes: 7 additions & 5 deletions src/components/tables/CippTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -629,12 +629,14 @@ export default function CippTable({
if (!disablePDFExport || !disableCSVExport) {
const keys = []
const exportFormatter = {}
const exportFormatterArgs = {}
columns.map((col) => {
if (col.exportSelector) keys.push(col.exportSelector)
if (col.exportFormatter) exportFormatter[col.exportSelector] = col.exportFormatter
if (col.exportFormatterArgs)
exportFormatterArgs[col.exportSelector] = col.exportFormatterArgs
return null
})

// Define the flatten function
const flatten = (obj, prefix = '') => {
if (obj === null) return {}
Expand Down Expand Up @@ -664,18 +666,18 @@ export default function CippTable({
// Define the applyFormatter function
const applyFormatter = (obj) => {
return Object.keys(obj).reduce((acc, key) => {
const formatterArgs = exportFormatterArgs[key]
const formatter = exportFormatter[key]
// Since the keys after flattening will be dot-separated, we need to adjust this to support nested keys if necessary.
const keyParts = key.split('.')
const finalKeyPart = keyParts[keyParts.length - 1]
const formattedValue =
typeof formatter === 'function' ? formatter({ cell: obj[key] }) : obj[key]
typeof formatter === 'function'
? formatter({ row: obj, cell: obj[key], ...formatterArgs })
: obj[key]
acc[key] = formattedValue
return acc
}, {})
}

// Process exportData function
const processExportData = (exportData, selectedColumns) => {
//filter out the columns that are not selected via selectedColumns
exportData = exportData.map((item) => {
Expand Down
8 changes: 4 additions & 4 deletions src/data/AuditLogSchema.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,12 @@
},
"List:Operation": [
{ "value": "UserLoggedIn", "name": "A user logged in" },
{ "value": "accessed mailbox items", "name": "accessed mailbox items" },
{ "value": "mailitemsaccessed", "name": "accessed mailbox items" },
{ "value": "add delegation entry.", "name": "added delegation entry" },
{ "value": "add domain to company.", "name": "added domain to company" },
{ "value": "add group.", "name": "added group" },
{ "value": "add member to group.", "name": "added member to group" },
{ "value": "add mailboxpermission", "name": "added delegate mailbox permissions" },
{ "value": "add-mailboxpermission", "name": "added delegate mailbox permissions" },
{ "value": "add member to role.", "name": "added member to role" },
{ "value": "add partner to company.", "name": "added a partner to the directory" },
{ "value": "add service principal.", "name": "added service principal" },
Expand Down Expand Up @@ -111,7 +111,7 @@
"value": "remove service principal credentials.",
"name": "removed credentials from a service principal"
},
{ "value": "remove mailboxpermission", "name": "removed delegate mailbox permissions" },
{ "value": "remove-mailboxpermission", "name": "removed delegate mailbox permissions" },
{ "value": "remove member from role.", "name": "removed a user from a directory role" },
{ "value": "remove partner from company.", "name": "removed a partner from the directory" },
{ "value": "removefolderpermissions", "name": "removed permissions from folder" },
Expand All @@ -132,7 +132,7 @@
"value": "set force change user password.",
"name": "set property that forces user to change password"
},
{ "value": "set inboxrule", "name": "modified inbox rule from outlook web app" },
{ "value": "set-inboxrule", "name": "modified inbox rule from outlook web app" },
{ "value": "set license properties.", "name": "set license properties" },
{ "value": "set password policy.", "name": "set password policy" },
{ "value": "softdelete", "name": "deleted messages from deleted items folder" },
Expand Down
67 changes: 56 additions & 11 deletions src/data/Extensions.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
[
{
"name": "CIPP-API Integration",
"name": "CIPP-API",
"type": "CIPP-API",
"cat": "API",
"forceSyncButton": false,
"disableWhenhosted": true,
"helpText": "This integration allows you to enable CIPP-API access outside of CIPP. Requires Global Administrator permissions inside your tenant for activation of the API. The API credentials will only be shown once.",
"SettingOptions": [
{
Expand All @@ -20,7 +21,7 @@
"mappingRequired": false
},
{
"name": "Gradient Integration",
"name": "Gradient",
"type": "Gradient",
"cat": "Billing & Invoicing",
"forceSyncButton": true,
Expand Down Expand Up @@ -54,7 +55,7 @@
"mappingRequired": false
},
{
"name": "Halo PSA Ticketing Integration",
"name": "Halo PSA Ticketing",
"type": "HaloPSA",
"cat": "Ticketing",
"forceSyncButton": false,
Expand Down Expand Up @@ -111,7 +112,7 @@
"mappingRequired": true
},
{
"name": "NinjaOne Integration",
"name": "NinjaOne",
"type": "NinjaOne",
"cat": "Documentation & Monitoring",
"forceSyncButton": true,
Expand All @@ -121,7 +122,7 @@
"type": "input",
"fieldtype": "input",
"name": "NinjaOne.Instance",
"label": "Please enter your NinjaOne Instance",
"label": "Please enter your NinjaOne Instance hostname",
"placeholder": "app.ninjarmm.com, eu.ninjarmm.com, oc.ninjarmm.com, ca.ninjarmm.com, us2.ninjarmm.com"
},
{
Expand All @@ -140,26 +141,70 @@
},
{
"type": "checkbox",
"name": "NinjaOne.UserDocumentsEnabled",
"label": "Synchronize Detailed User Information (Requires NinjaOne Documentation)"
"name": "NinjaOne.LicenseDocumentsEnabled",
"label": "Sync Licenses (Requires NinjaOne Documentation)"
},
{
"type": "checkbox",
"name": "NinjaOne.LicenseDocumentsEnabled",
"label": "Synchronize Detailed License Information (Requires NinjaOne Documentation)"
"name": "NinjaOne.UserDocumentsEnabled",
"label": "Sync Users (Requires NinjaOne Documentation)"
},
{
"type": "checkbox",
"name": "NinjaOne.LicensedOnly",
"label": "Only Synchronize Licensed Users"
"label": "Only Sync Licensed Users (Requires NinjaOne Documentation)"
},
{
"type": "checkbox",
"name": "NinjaOne.Enabled",
"label": "Enable Integration"
}
],
"mappingRequired": true
"mappingRequired": true,
"fieldMapping": true,
"autoMapSyncApi": true,
"showSyncButton": true
},
{
"name": "Hudu",
"type": "Hudu",
"cat": "Documentation",
"forceSyncButton": true,
"helpText": "This integration allows you to populate custom asset layouts with Tenant information, monitor device compliance state, document other items and generate relationships inside Hudu.",
"SettingOptions": [
{
"type": "input",
"fieldtype": "input",
"name": "Hudu.BaseUrl",
"label": "Please enter your Hudu URL",
"placeholder": "https://yourcompany.huducloud.com"
},
{
"type": "input",
"fieldtype": "password",
"name": "Hudu.APIKey",
"label": "Hudu API Key",
"placeholder": "Enter your Hudu API Key"
},
{
"type": "checkbox",
"name": "Hudu.CreateMissingUsers",
"label": "Create missing users in Hudu"
},
{
"type": "checkbox",
"name": "Hudu.CreateMissingDevices",
"label": "Create missing devices in Hudu"
},
{
"type": "checkbox",
"name": "Hudu.Enabled",
"label": "Enable Integration"
}
],
"mappingRequired": true,
"fieldMapping": true,
"showSyncButton": true
},
{
"name": "PasswordPusher",
Expand Down
Loading

0 comments on commit 2df0a1a

Please sign in to comment.