Skip to content

Commit

Permalink
Merge pull request #1019 from johnduprey/dev
Browse files Browse the repository at this point in the history
Maintenance Scripts
  • Loading branch information
KelvinTegelaar authored Jul 12, 2022
2 parents b4e54cf + b04237b commit 52826d4
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 6 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"@reduxjs/toolkit": "^1.7.0",
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.3",
"axios": "^0.24.0",
"buffer": "^6.0.3",
"chart.js": "^3.5.1",
"classnames": "^2.3.1",
"core-js": "^3.18.3",
Expand Down
5 changes: 5 additions & 0 deletions src/_nav.js
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,11 @@ const _nav = [
name: 'SAM Setup Wizard (β)',
to: '/cipp/setup',
},
{
component: CNavItem,
name: 'Maintenance',
to: '/cipp/maintenance',
},
{
component: CNavItem,
name: 'Documentation',
Expand Down
6 changes: 5 additions & 1 deletion src/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import React from 'react'
/* eslint-disable prettier/prettier */
const Home = React.lazy(() => import('src/views/home/Home'))
const Logs = React.lazy(() => import('src/views/cipp/Logs'))
const Maintenance = React.lazy(() => import('src/views/cipp/Maintenance'))
const Users = React.lazy(() => import('src/views/identity/administration/Users'))
const DeletedItems = React.lazy(() => import('src/views/identity/administration/Deleted'))
const ViewBEC = React.lazy(() => import('src/views/identity/administration/ViewBEC'))
Expand Down Expand Up @@ -155,14 +156,17 @@ const TransportDeploy = React.lazy(() =>
import('src/views/email-exchange/transport/DeployTransport'),
)
const SecurityComplianceAlerts = React.lazy(() => import('src/views/security/incidents/ListAlerts'))
const SecurityComplianceIncidents = React.lazy(() => import('src/views/security/incidents/ListIncidents'))
const SecurityComplianceIncidents = React.lazy(() =>
import('src/views/security/incidents/ListIncidents'),
)
const License = React.lazy(() => import('src/views/pages/license/License'))
const ServiceHealth = React.lazy(() => import('src/views/tenant/administration/ServiceHealth'))

const routes = [
// { path: '/', exact: true, name: 'Home' },
{ path: '/home', name: 'Home', component: Home },
{ path: '/cipp/logs', name: 'Logs', component: Logs },
{ path: '/cipp/maintenance', name: 'Maintenance', component: Maintenance },
{ path: '/cipp/404', name: 'Error', component: Page404 },
{ path: '/cipp/403', name: 'Error', component: Page403 },
{ path: '/identity', name: 'Identity' },
Expand Down
139 changes: 139 additions & 0 deletions src/views/cipp/Maintenance.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import React, { useState } from 'react'
import { Buffer } from 'buffer'
//import { CippCodeBlock } from 'src/components/utilities'
import { useLazyGenericGetRequestQuery } from 'src/store/api/app'
import {
CButton,
CForm,
CRow,
CCol,
CCard,
CCardBody,
CCardHeader,
CCardTitle,
} from '@coreui/react'
import { Form } from 'react-final-form'
import { RFFCFormSelect } from 'src/components/forms'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faLink, faScroll } from '@fortawesome/free-solid-svg-icons'
import { CippCodeBlock } from 'src/components/utilities'

const Maintenance = () => {
const [selectedScript, setSelectedScript] = useState()
const [listBackend, listBackendResult] = useLazyGenericGetRequestQuery()
const [listScript, listScriptResult] = useLazyGenericGetRequestQuery()
const [listScriptLink, listScriptLinkResult] = useLazyGenericGetRequestQuery()

const handleSubmit = async (values) => {
listScript({ path: 'api/ExecMaintenanceScripts', params: values })
setSelectedScript(values.ScriptFile)
}

const handleGetLink = () => {
console.log('Making link')
listScriptLink({
path: 'api/ExecMaintenanceScripts',
params: { ScriptFile: selectedScript, MakeLink: 'True' },
})
}
return (
<>
{listBackendResult.isUninitialized && listBackend({ path: 'api/ExecMaintenanceScripts' })}
<CRow>
<CCol>
<CCard className="options-card">
<CCardHeader>
<CCardTitle className="d-flex justify-content-between">Maintenance</CCardTitle>
</CCardHeader>
<CCardBody>
<Form
initialValues={{}}
onSubmit={handleSubmit}
render={({ handleSubmit, submitting, values }) => {
return (
<CForm onSubmit={handleSubmit}>
<CRow>
{listBackendResult.isSuccess && (
<CCol>
<RFFCFormSelect
name="ScriptFile"
label="Script File"
placeholder="-- Select a script --"
values={listBackendResult.data.ScriptFiles}
/>
</CCol>
)}
</CRow>
<CRow className="mb-3">
<CCol>
<CButton type="submit" disabled={submitting}>
<FontAwesomeIcon icon={faScroll} className="me-2" />
Load Script
</CButton>
</CCol>
</CRow>
</CForm>
)
}}
/>
</CCardBody>
</CCard>
</CCol>
</CRow>
<CRow>
<CCol>
{listScriptResult.isSuccess && (
<CCard>
<CCardHeader>
<CCardTitle>Script Details</CCardTitle>
</CCardHeader>
<CCardBody>
<p>
<CButton type="submit" onClick={handleGetLink}>
<FontAwesomeIcon icon={faLink} className="me-2" />
Create Link
</CButton>
</p>
{listScriptLinkResult.isSuccess && (
<p>
{listScriptLinkResult.data.Link !== undefined && (
<>
Copy this text into a PowerShell terminal, we recommend Azure Cloud Shell.
The link is valid for 5 minutes.
<br />
<CippCodeBlock
language="text"
showLineNumbers={false}
wrapLongLines={true}
code={
'irm ' +
window.location.origin +
listScriptLinkResult.data.Link +
' | iex'
}
/>
</>
)}
</p>
)}
{listScriptResult.data.ScriptContent !== undefined && (
<p>
<h5>Maintenance Script Contents</h5>
<CippCodeBlock
language="powershell"
showLineNumbers={true}
wrapLongLines={true}
code={Buffer.from(listScriptResult.data.ScriptContent, 'base64').toString()}
/>
</p>
)}
</CCardBody>
</CCard>
)}
</CCol>
</CRow>
</>
)
}

export default Maintenance
24 changes: 19 additions & 5 deletions src/views/tenant/standards/IndividualDomain.js
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,24 @@ function ResultsCard({
finalState = 'Fail'
}

var docLink = ''
if (providerInfo) {
switch (type) {
case 'SPF':
docLink = providerInfo._SpfComment
break
case 'DKIM':
docLink = providerInfo._DkimComment
break
case 'MX':
docLink = providerInfo._MxComment
break
default:
docLink = ''
break
}
}

return (
<>
<CCard className="content-card">
Expand All @@ -461,11 +479,7 @@ function ResultsCard({
<span>
{providerInfo && (
<CTooltip content={`${providerInfo.Name} ${type} documentation`}>
<CLink
className="mx-2 card-header-link"
href={providerInfo._MxComment}
target="_blank"
>
<CLink className="mx-2 card-header-link" href={docLink} target="_blank">
<FontAwesomeIcon icon={faQuestionCircle} className="me-2" />
</CLink>
</CTooltip>
Expand Down
4 changes: 4 additions & 0 deletions staticwebapp.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@
"route": "/",
"allowedRoles": ["admin", "editor", "readonly", "reader", "authenticated", "anonymous"]
},
{
"route": "/api/Public*",
"allowedRoles": ["admin", "editor", "readonly", "reader", "authenticated", "anonymous"]
},
{
"route": "*",
"allowedRoles": ["admin", "editor", "readonly", "reader"]
Expand Down

0 comments on commit 52826d4

Please sign in to comment.