Skip to content

[pull] dev from KelvinTegelaar:dev #52

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Jul 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
5 changes: 5 additions & 0 deletions src/_nav.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,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
1 change: 1 addition & 0 deletions src/data/Extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"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 Down
98 changes: 98 additions & 0 deletions src/data/standards.json
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,16 @@
"impact": "Low Impact",
"impactColour": "info"
},
{
"name": "standards.EnableLitigationHold",
"cat": "Exchange Standards",
"tag": ["lowimpact"],
"helpText": "Enables litigation hold for all UserMailboxes with a valid license.",
"addedComponent": [],
"label": "Enable Litigation Hold for all users",
"impact": "Low Impact",
"impactColour": "info"
},
{
"name": "standards.SpoofWarn",
"cat": "Exchange Standards",
Expand Down Expand Up @@ -1057,6 +1067,22 @@
"impact": "Medium Impact",
"impactColour": "warning"
},
{
"name": "standards.UserReportDestinationEmail",
"cat": "Exchange Standards",
"tag": ["mediumimpact"],
"helpText": "Sets the destination for email when users report them as spam or phishing. Works well together with the 'Set the state of the built-in Report button in Outlook standard'.",
"addedComponent": [
{
"type": "input",
"name": "standards.UserReportDestinationEmail.Email",
"label": "Destination email address"
}
],
"label": "Set the destination email for user reported emails",
"impact": "Medium Impact",
"impactColour": "warning"
},
{
"name": "standards.DisableSharedMailbox",
"cat": "Exchange Standards",
Expand Down Expand Up @@ -1138,6 +1164,40 @@
"name": "standards.AntiPhishPolicy.EnableUnusualCharactersSafetyTips",
"default": true
},
{
"type": "Select",
"label": "If the message is detected as spoof by spoof intelligence",
"name": "standards.AntiPhishPolicy.AuthenticationFailAction",
"values": [
{
"label": "Quarantine the message",
"value": "Quarantine"
},
{
"label": "Move to Junk Folder",
"value": "MoveToJmf"
}
]
},
{
"type": "Select",
"label": "Quarantine policy for Spoof",
"name": "standards.AntiPhishPolicy.SpoofQuarantineTag",
"values": [
{
"label": "AdminOnlyAccessPolicy",
"value": "AdminOnlyAccessPolicy"
},
{
"label": "DefaultFullAccessPolicy",
"value": "DefaultFullAccessPolicy"
},
{
"label": "DefaultFullAccessWithNotificationPolicy",
"value": "DefaultFullAccessWithNotificationPolicy"
}
]
},
{
"type": "Select",
"label": "If a message is detected as user impersonation",
Expand All @@ -1157,6 +1217,25 @@
}
]
},
{
"type": "Select",
"label": "Quarantine policy for user impersonation",
"name": "standards.AntiPhishPolicy.TargetedUserQuarantineTag",
"values": [
{
"label": "AdminOnlyAccessPolicy",
"value": "AdminOnlyAccessPolicy"
},
{
"label": "DefaultFullAccessPolicy",
"value": "DefaultFullAccessPolicy"
},
{
"label": "DefaultFullAccessWithNotificationPolicy",
"value": "DefaultFullAccessWithNotificationPolicy"
}
]
},
{
"type": "Select",
"label": "If a message is detected as domain impersonation",
Expand All @@ -1176,6 +1255,25 @@
}
]
},
{
"type": "Select",
"label": "Quarantine policy for domain impersonation",
"name": "standards.AntiPhishPolicy.TargetedDomainQuarantineTag",
"values": [
{
"label": "DefaultFullAccessWithNotificationPolicy",
"value": "DefaultFullAccessWithNotificationPolicy"
},
{
"label": "AdminOnlyAccessPolicy",
"value": "AdminOnlyAccessPolicy"
},
{
"label": "DefaultFullAccessPolicy",
"value": "DefaultFullAccessPolicy"
}
]
},
{
"type": "Select",
"label": "If Mailbox Intelligence detects an impersonated user",
Expand Down
3 changes: 2 additions & 1 deletion src/importsMap.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ import React from 'react'
"/email/administration/edit-calendar-permissions": React.lazy(() => import('./views/email-exchange/administration/EditCalendarPermissions')),
"/email/administration/view-mobile-devices": React.lazy(() => import('./views/email-exchange/administration/ViewMobileDevices')),
"/email/administration/edit-contact": React.lazy(() => import('./views/email-exchange/administration/EditContact')),
"/email/administration/mailboxes": React.lazy(() => import('./views/email-exchange/administration/MailboxesList')),
"/email/administration/mailboxes": React.lazy(() => import('./views/email-exchange/administration/MailboxesList')),
"/email/administration/deleted-mailboxes": React.lazy(() => import('./views/email-exchange/administration/DeletedMailboxes')),
"/email/administration/mailbox-rules": React.lazy(() => import('./views/email-exchange/administration/MailboxRuleList')),
"/email/administration/Quarantine": React.lazy(() => import('./views/email-exchange/administration/QuarantineList')),
"/email/administration/tenant-allow-block-lists": React.lazy(() => import('./views/email-exchange/administration/ListTenantAllowBlockList')),
Expand Down
6 changes: 6 additions & 0 deletions src/routes.json
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,12 @@
"component": "views/email-exchange/administration/MailboxesList",
"allowedRoles": ["admin", "editor", "readonly"]
},
{
"name": "Deleted Mailboxes",
"path": "/email/administration/deleted-mailboxes",
"component": "views/email-exchange/administration/DeletedMailboxes",
"allowedRoles": ["admin", "editor", "readonly"]
},
{
"name": "List Mailbox Rules",
"path": "/email/administration/mailbox-rules",
Expand Down
19 changes: 15 additions & 4 deletions src/views/cipp/Extensions.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ export default function CIPPExtensions() {
})
}

const ButtonGenerate = (integrationType, forceSync) => (
const ButtonGenerate = (integrationType, forceSync, disabled) => (
<>
<CButton className="me-2" form={integrationType} type="submit">
<CButton disabled={disabled} className="me-2" form={integrationType} type="submit">
{extensionConfigResult.isFetching && (
<FontAwesomeIcon icon={faCircleNotch} spin className="me-2" size="1x" />
)}
Set Extension Settings
</CButton>
<CButton onClick={() => onSubmitTest(integrationType)} className="me-2">
<CButton disabled={disabled} onClick={() => onSubmitTest(integrationType)} className="me-2">
{listExtensionTestResult.isFetching && (
<FontAwesomeIcon icon={faCircleNotch} spin className="me-2" size="1x" />
)}
Expand Down Expand Up @@ -83,6 +83,7 @@ export default function CIPPExtensions() {
queryString.set('tab', tab.toString())
navigate(`${location.pathname}?${queryString}`)
}
const hostedMetaContent = document.querySelector('meta[name="hosted"]')?.getAttribute('content')

return (
<CippPage title="Settings" tenantSelector={false}>
Expand All @@ -105,11 +106,21 @@ export default function CIPPExtensions() {
<CippLazy visible={active === idx}>
<CRow className="mb-3">
<CCol sm={12} md={integration.mappingRequired ? 4 : 12} className="mb-3">
{hostedMetaContent === 'true' && integration.disableWhenhosted && (
<CippCallout color="warning">
This extension requires activation in the management portal for hosted
clients.
</CippCallout>
)}
<CippButtonCard
title={integration.name}
titleType="big"
isFetching={listBackendResult.isFetching}
CardButton={ButtonGenerate(integration.type, integration.forceSync)}
CardButton={ButtonGenerate(
integration.type,
integration.forceSync,
(hostedMetaContent === 'true' && integration.disableWhenhosted) || false,
)}
key={idx}
>
<p>{integration.helpText}</p>
Expand Down
Loading