This commit is contained in:
Usman Nasir
2019-10-15 22:59:22 +05:00
parent 53c95d087f
commit dafff26e47
13 changed files with 1425 additions and 535 deletions

735
.idea/workspace.xml generated
View File

@@ -26,158 +26,75 @@
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
</component>
<component name="FileEditorManager">
<leaf>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/install/install.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="962" column="43" selection-start-line="962" selection-start-column="43" selection-end-line="962" selection-end-column="43" />
<folding>
<element signature="e#0#10#0" expanded="true" />
<element signature="e#143696#150827#0" />
<element signature="e#150888#151548#0" />
<element signature="e#151611#152278#0" />
<element signature="e#152347#153095#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/IncBackups/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="23" column="26" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
<state relative-caret-position="338">
<caret line="572" column="71" selection-start-line="572" selection-start-column="71" selection-end-line="572" selection-end-column="71" />
<folding>
<element signature="e#24#63#0" expanded="true" />
<element signature="e#762#1555#0" />
<element signature="e#1594#1977#0" />
<element signature="e#2012#5365#0" />
<element signature="e#5408#7638#0" />
<element signature="e#7676#8529#0" />
<element signature="e#8569#10185#0" />
<element signature="e#10226#12055#0" />
<element signature="e#12091#14087#0" />
<element signature="e#14120#14927#0" />
<element signature="e#14966#16346#0" />
<element signature="e#16379#17556#0" />
<element signature="e#17592#18390#0" />
<element signature="e#18431#20893#0" />
<element signature="e#20940#22006#0" />
<element signature="e#22066#23973#0" />
<element signature="e#816#1687#0" />
<element signature="e#1619#1687#0" />
<element signature="e#1739#2040#0" />
<element signature="e#2080#2148#0" />
<element signature="e#2183#5536#0" />
<element signature="e#18532#18600#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/IncBackups/static/IncBackups/IncBackups.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="302">
<caret line="159" column="48" selection-start-line="159" selection-start-column="48" selection-end-line="159" selection-end-column="48" />
<folding>
<element signature="e#491#2247#0" />
<element signature="e#2295#2339#0" />
<element signature="e#2390#3395#0" />
<element signature="e#4656#5485#0" />
<element signature="e#5523#6688#0" />
<element signature="e#6744#7547#0" />
<element signature="e#7654#12511#0" />
<element signature="e#8121#9397#0" />
<element signature="e#9444#11129#0" />
<element signature="e#11190#12506#0" />
<element signature="e#12577#19273#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/incrementalDestinations.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="947">
<caret line="99" column="77" selection-start-line="99" selection-start-column="77" selection-end-line="99" selection-end-column="77" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/IncBackups/IncBackupsControl.py">
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/backupSchedule.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="232">
<caret line="70" column="125" selection-start-line="70" selection-start-column="125" selection-end-line="70" selection-end-column="125" />
<state relative-caret-position="180">
<caret line="12" column="97" lean-forward="true" selection-start-line="12" selection-start-column="97" selection-end-line="12" selection-end-column="97" />
<folding>
<element signature="e#907#1022#0" />
<element signature="e#1124#1419#0" />
<element signature="e#1449#1594#0" />
<element signature="e#1631#2625#0" />
<element signature="e#2666#3981#0" />
<element signature="e#4019#5013#0" />
<element signature="e#5051#7775#0" />
<element signature="e#5068#7666#0" />
<element signature="e#5671#6005#0" />
<element signature="e#6077#6467#0" />
<element signature="e#6575#6874#0" />
<element signature="e#6958#7208#0" />
<element signature="e#7357#7599#0" />
<element signature="e#7818#13652#0" />
<element signature="e#7836#13511#0" />
<element signature="e#7836#7861#0" />
<element signature="e#8535#8943#0" />
<element signature="e#9125#10304#0" />
<element signature="e#9150#9242#0" />
<element signature="e#9287#9900#0" />
<element signature="e#9453#9494#0" />
<element signature="e#9729#9900#0" />
<element signature="e#9855#9900#0" />
<element signature="e#10546#10620#0" />
<element signature="e#10678#10693#0" />
<element signature="e#10761#11507#0" />
<element signature="e#10929#11456#0" />
<element signature="e#11709#12320#0" />
<element signature="e#11942#12267#0" />
<element signature="e#12547#12806#0" />
<element signature="e#13560#13652#0" />
<element signature="e#13688#15519#0" />
<element signature="e#15560#17646#0" />
<element signature="e#17683#19518#0" />
<element signature="e#19556#20829#0" />
<element signature="e#20867#23355#0" />
<element signature="e#21629#21817#0" />
<element signature="e#21975#22024#0" />
<element signature="e#22067#22121#0" />
<element signature="e#22161#22211#0" />
<element signature="e#22501#22747#0" />
<element signature="e#22812#23210#0" />
<element signature="e#500#539#0#HTML" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/plogical/mysqlUtilities.py">
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/homePage.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="195" column="12" selection-start-line="195" selection-start-column="12" selection-end-line="195" selection-end-column="12" />
<folding>
<element signature="e#661#1069#0" />
<element signature="e#1135#1274#0" />
<element signature="e#1329#1835#0" />
<element signature="e#2626#3079#0" />
<element signature="e#3158#3589#0" />
<element signature="e#3657#4113#0" />
<element signature="e#4202#5853#0" />
<element signature="e#6277#6680#0" />
<element signature="e#8218#9383#0" />
<element signature="e#9445#9894#0" />
<element signature="e#9961#10109#0" />
<element signature="e#10159#12226#0" />
<element signature="e#12280#12553#0" />
<element signature="e#12614#14004#0" />
<element signature="e#14058#14529#0" />
<element signature="e#14581#14956#0" />
<element signature="e#15010#16208#0" />
<element signature="e#16263#17486#0" />
<element signature="e#17541#18011#0" />
<element signature="e#18069#19856#0" />
<element signature="e#19914#21114#0" />
</folding>
<state relative-caret-position="450">
<caret line="30" column="47" selection-start-line="30" selection-start-column="47" selection-end-line="30" selection-end-column="47" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/plogical/processUtilities.py">
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="249" lean-forward="true" selection-start-line="249" selection-end-line="249" />
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
<state relative-caret-position="8850">
<caret line="590" column="104" selection-start-line="590" selection-start-column="104" selection-end-line="590" selection-end-column="104" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/IncBackups/IncScheduler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="21" column="8" selection-start-line="21" selection-start-column="8" selection-end-line="21" selection-end-column="8" />
</state>
</provider>
</entry>
@@ -194,16 +111,6 @@
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>skip</find>
<find>email</find>
<find>dbuser</find>
<find>createBackup</find>
<find>restoreData</find>
<find>submitBackupCreation</find>
<find>changePassword</find>
<find>createEmail</find>
<find>createDatabase</find>
<find>changeEmailPassword</find>
<find>Backups</find>
<find>schedule</find>
<find>schedulebackups</find>
@@ -223,7 +130,17 @@
<find>re.mat</find>
<find>Backing up data..</find>
<find>[46][5009]</find>
<find>externalApp</find>
<find>restoreDatabaseBackup</find>
<find>logging.writeToFile</find>
<find>build=0</find>
<find>version.txt</find>
<find>logging</find>
<find>Incremen</find>
<find>restoreDatabase</find>
<find>1.9.0</find>
<find>/usr/local/CyberCP/public/rainloop/rainloop/v/1.12.1/include.php</find>
<find>CLManager</find>
</findStrings>
<replaceStrings>
<replace>admin.api == 1</replace>
@@ -252,34 +169,26 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/serverStatus/serverStatusUtil.py" />
<option value="$PROJECT_DIR$/serverStatus/templates/serverStatus/litespeedStatus.html" />
<option value="$PROJECT_DIR$/websiteFunctions/StagingSetup.py" />
<option value="$PROJECT_DIR$/databases/models.py" />
<option value="$PROJECT_DIR$/plogical/sslUtilities.py" />
<option value="$PROJECT_DIR$/plogical/vhost.py" />
<option value="$PROJECT_DIR$/CyberCP/urls.py" />
<option value="$PROJECT_DIR$/CyberCP/settings.py" />
<option value="$PROJECT_DIR$/backup/views.py" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/incrementalDestinations.html" />
<option value="$PROJECT_DIR$/managePHP/ubuntuphp70.xml" />
<option value="$PROJECT_DIR$/managePHP/ubuntuphp71.xml" />
<option value="$PROJECT_DIR$/managePHP/ubuntuphp72.xml" />
<option value="$PROJECT_DIR$/managePHP/ubuntuphp73.xml" />
<option value="$PROJECT_DIR$/plogical/applicationInstaller.py" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/createBackup.html" />
<option value="$PROJECT_DIR$/plogical/cPanelImporter.py" />
<option value="$PROJECT_DIR$/emailPremium/templates/emailPremium/emailLimits.html" />
<option value="$PROJECT_DIR$/IncBackups/IncBackups.py" />
<option value="$PROJECT_DIR$/plogical/mailUtilities.py" />
<option value="$PROJECT_DIR$/IncBackups/restoreMeta.py" />
<option value="$PROJECT_DIR$/baseTemplate/templates/baseTemplate/index.html" />
<option value="$PROJECT_DIR$/backup/backupManager.py" />
<option value="$PROJECT_DIR$/cli/cliLogger.py" />
<option value="$PROJECT_DIR$/emailPremium/templates/emailPremium/listDomains.html" />
<option value="$PROJECT_DIR$/emailPremium/templates/emailPremium/policyServer.html" />
<option value="$PROJECT_DIR$/firewall/templates/firewall/index.html" />
<option value="$PROJECT_DIR$/install/install.py" />
<option value="$PROJECT_DIR$/install/installLog.py" />
<option value="$PROJECT_DIR$/loginSystem/templates/loginSystem/login.html" />
<option value="$PROJECT_DIR$/plogical/CyberCPLogFileWriter.py" />
@@ -288,27 +197,35 @@
<option value="$PROJECT_DIR$/plogical/backupUtilities.py" />
<option value="$PROJECT_DIR$/plogical/remoteBackup.py" />
<option value="$PROJECT_DIR$/plogical/remoteTransferUtilities.py" />
<option value="$PROJECT_DIR$/plogical/upgrade.py" />
<option value="$PROJECT_DIR$/pluginInstaller/pluginInstaller.py" />
<option value="$PROJECT_DIR$/postfixSenderPolicy/accept_traffic.py" />
<option value="$PROJECT_DIR$/s3Backups/s3Backups.py" />
<option value="$PROJECT_DIR$/IncBackups/models.py" />
<option value="$PROJECT_DIR$/plogical/csf.py" />
<option value="$PROJECT_DIR$/IncBackups/urls.py" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/backupSchedule.html" />
<option value="$PROJECT_DIR$/IncBackups/IncScheduler.py" />
<option value="$PROJECT_DIR$/IncBackups/views.py" />
<option value="$PROJECT_DIR$/IncBackups/static/IncBackups/IncBackups.js" />
<option value="$PROJECT_DIR$/CyberCP/secMiddleware.py" />
<option value="$PROJECT_DIR$/plogical/processUtilities.py" />
<option value="$PROJECT_DIR$/plogical/mysqlUtilities.py" />
<option value="$PROJECT_DIR$/serverLogs/views.py" />
<option value="$PROJECT_DIR$/plogical/processUtilities.py" />
<option value="$PROJECT_DIR$/IncBackups/restoreMeta.py" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/incrementalDestinations.html" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/createBackup.html" />
<option value="$PROJECT_DIR$/plogical/adminPass.py" />
<option value="$PROJECT_DIR$/loginSystem/views.py" />
<option value="$PROJECT_DIR$/baseTemplate/templates/baseTemplate/index.html" />
<option value="$PROJECT_DIR$/IncBackups/IncBackupsControl.py" />
<option value="$PROJECT_DIR$/install/install.py" />
<option value="$PROJECT_DIR$/plogical/upgrade.py" />
<option value="$PROJECT_DIR$/IncBackups/views.py" />
<option value="$PROJECT_DIR$/IncBackups/templates/IncBackups/backupSchedule.html" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="1451" />
<option name="y" value="27" />
<option name="x" value="1511" />
<option name="y" value="52" />
<option name="width" value="1221" />
<option name="height" value="609" />
</component>
@@ -317,7 +234,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
@@ -328,12 +244,26 @@
<path>
<item name="CyberCP" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberCP" type="462c0819:PsiDirectoryNode" />
<item name="plogical" type="462c0819:PsiDirectoryNode" />
<item name="IncBackups" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="CyberCP" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberCP" type="462c0819:PsiDirectoryNode" />
<item name="IncBackups" type="462c0819:PsiDirectoryNode" />
<item name="templates" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="CyberCP" type="b2602c69:ProjectViewProjectNode" />
<item name="CyberCP" type="462c0819:PsiDirectoryNode" />
<item name="IncBackups" type="462c0819:PsiDirectoryNode" />
<item name="templates" type="462c0819:PsiDirectoryNode" />
<item name="IncBackups" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
@@ -515,18 +445,20 @@
<workItem from="1570351061233" duration="1861000" />
<workItem from="1570367938280" duration="1753000" />
<workItem from="1570509489744" duration="3195000" />
<workItem from="1570899537960" duration="23792000" />
<workItem from="1570899537960" duration="34622000" />
<workItem from="1571158869749" duration="705000" />
<workItem from="1571160353900" duration="938000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="696373000" />
<option name="totallyTimeSpent" value="708846000" />
</component>
<component name="ToolWindowManager">
<frame x="1366" y="25" width="1366" height="684" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.03181818" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.19621213" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
@@ -607,76 +539,7 @@
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/serverStatus/templates/serverStatus/cybercpmainlogfile.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="26" column="32" lean-forward="true" selection-start-line="26" selection-start-column="32" selection-end-line="28" selection-end-column="38" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/applicationInstaller.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="11" selection-start-line="11" selection-end-line="11" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/websiteFunctions/website.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="9435">
<caret line="653" column="45" selection-start-line="653" selection-start-column="36" selection-end-line="653" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/CLManager/templates/CLManager/listPackages.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="207">
<caret line="196" column="38" lean-forward="true" selection-start-line="55" selection-start-column="32" selection-end-line="196" selection-end-column="38" />
<folding>
<element signature="e#2494#2881#0#HTML" />
<element signature="e#2914#13791#0#HTML" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/cPanelImporter.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-495">
<caret line="3" column="13" selection-start-line="3" selection-start-column="13" selection-end-line="3" selection-end-column="13" />
<folding>
<element signature="e#33#47#0" expanded="true" />
<element signature="e#1202#1501#0" />
<element signature="e#1538#2371#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/emailPremium/templates/emailPremium/emailLimits.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="499">
<caret line="222" selection-start-line="222" selection-end-line="222" />
<folding>
<element signature="n#style#0;n#div#0;n#div#1;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#img#0;n#td#4;n#tr#0;n#tbody#0;n#table#0;n#div#0;n#div#0;n#div#0;n#div#0;n#div#1;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#img#1;n#td#4;n#tr#0;n#tbody#0;n#table#0;n#div#0;n#div#0;n#div#0;n#div#0;n#div#1;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#1;n#div#0;n#form#0;n#div#1;n#div#0;n#div#0;n#div#0;n#div#1;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#0;n#div#2;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#0;n#div#0;n#div#0;n#div#0;n#div#2;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#th#5;n#tr#0;n#thead#0;n#table#0;n#div#1;n#div#0;n#div#0;n#div#0;n#div#2;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#img#0;n#td#5;n#tr#0;n#tbody#0;n#table#0;n#div#1;n#div#0;n#div#0;n#div#0;n#div#2;n#div#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#img#1;n#td#5;n#tr#0;n#tbody#0;n#table#0;n#div#1;n#div#0;n#div#0;n#div#0;n#div#2;n#div#0;n#!!top" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/IncBackups.py" />
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="114">
<caret line="606" column="33" selection-start-line="606" selection-start-column="33" selection-end-line="606" selection-end-column="33" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/cli/cliLogger.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
@@ -708,16 +571,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/install/install.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="472">
<caret line="3857" selection-start-line="3857" selection-end-line="3857" />
<folding>
<element signature="e#0#10#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/loginSystem/templates/loginSystem/login.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="157">
@@ -793,16 +646,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/upgrade.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="217">
<caret line="1824" column="27" lean-forward="true" selection-start-line="1824" selection-start-column="27" selection-end-line="1824" selection-end-column="27" />
<folding>
<element signature="e#0#9#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/remoteTransferUtilities.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="472">
@@ -845,16 +688,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/createBackup.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="810">
<caret line="92" column="30" lean-forward="true" selection-start-line="54" selection-start-column="24" selection-end-line="92" selection-end-column="30" />
<folding>
<element signature="e#2627#4736#0#HTML" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/backup/templates/backup/remoteBackups.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="353">
@@ -932,23 +765,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" column="21" selection-start-line="22" selection-start-column="4" selection-end-line="22" selection-end-column="21" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/backupSchedule.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="367">
<caret line="132" column="101" selection-start-line="132" selection-start-column="101" selection-end-line="132" selection-end-column="101" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/vhost.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-855" />
@@ -998,50 +814,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/restoreMeta.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" column="66" lean-forward="true" selection-start-line="19" selection-start-column="66" selection-end-line="19" selection-end-column="66" />
<folding>
<element signature="e#33#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/IncScheduler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="21" column="8" selection-start-line="21" selection-start-column="8" selection-end-line="21" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/incrementalDestinations.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="947">
<caret line="99" column="77" selection-start-line="99" selection-start-column="77" selection-end-line="99" selection-end-column="77" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/static/IncBackups/IncBackups.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="302">
<caret line="159" column="48" selection-start-line="159" selection-start-column="48" selection-end-line="159" selection-end-column="48" />
<folding>
<element signature="e#491#2247#0" />
<element signature="e#2295#2339#0" />
<element signature="e#2390#3395#0" />
<element signature="e#4656#5485#0" />
<element signature="e#5523#6688#0" />
<element signature="e#6744#7547#0" />
<element signature="e#7654#12511#0" />
<element signature="e#8121#9397#0" />
<element signature="e#9444#11129#0" />
<element signature="e#11190#12506#0" />
<element signature="e#12577#19273#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/CyberCP/secMiddleware.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="930">
@@ -1052,37 +824,22 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/views.py">
<entry file="file://$PROJECT_DIR$/serverLogs/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="23" column="26" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
<state relative-caret-position="2895">
<caret line="205" selection-start-line="205" selection-end-line="205" />
<folding>
<element signature="e#24#63#0" expanded="true" />
<element signature="e#762#1555#0" />
<element signature="e#1594#1977#0" />
<element signature="e#2012#5365#0" />
<element signature="e#5408#7638#0" />
<element signature="e#7676#8529#0" />
<element signature="e#8569#10185#0" />
<element signature="e#10226#12055#0" />
<element signature="e#12091#14087#0" />
<element signature="e#14120#14927#0" />
<element signature="e#14966#16346#0" />
<element signature="e#16379#17556#0" />
<element signature="e#17592#18390#0" />
<element signature="e#18431#20893#0" />
<element signature="e#20940#22006#0" />
<element signature="e#22066#23973#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/processUtilities.py">
<entry file="file://$PROJECT_DIR$/IncBackups/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="249" lean-forward="true" selection-start-line="249" selection-end-line="249" />
<state relative-caret-position="330">
<caret line="22" column="21" selection-start-line="22" selection-start-column="4" selection-end-line="22" selection-end-column="21" />
<folding>
<element signature="e#0#64#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
@@ -1117,53 +874,273 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/incrementalDestinations.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="14" column="159" selection-start-line="14" selection-start-column="159" selection-end-line="14" selection-end-column="159" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/restoreMeta.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="157">
<caret line="32" column="67" lean-forward="true" selection-start-line="32" selection-start-column="67" selection-end-line="32" selection-end-column="67" />
<folding>
<element signature="e#33#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/createBackup.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="17" column="14" lean-forward="true" selection-start-line="17" selection-start-column="14" selection-end-line="17" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/processUtilities.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="201">
<caret line="276" column="31" selection-start-line="276" selection-start-column="12" selection-end-line="276" selection-end-column="31" />
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/loginSystem/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="194">
<caret line="220" column="56" selection-start-line="220" selection-start-column="56" selection-end-line="220" selection-end-column="56" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/adminPass.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="184">
<caret line="33" column="52" selection-start-line="33" selection-start-column="52" selection-end-line="33" selection-end-column="52" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/static/IncBackups/IncBackups.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="302">
<caret line="159" column="48" selection-start-line="159" selection-start-column="48" selection-end-line="159" selection-end-column="48" />
<folding>
<element signature="e#491#2247#0" />
<element signature="e#2295#2339#0" />
<element signature="e#2390#3395#0" />
<element signature="e#4656#5485#0" />
<element signature="e#5523#6688#0" />
<element signature="e#6744#7547#0" />
<element signature="e#7654#12511#0" />
<element signature="e#8121#9397#0" />
<element signature="e#9444#11129#0" />
<element signature="e#11190#12506#0" />
<element signature="e#12577#19273#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/indexJavaFixed.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/IncBackupsControl.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="232">
<caret line="70" column="125" selection-start-line="70" selection-start-column="125" selection-end-line="70" selection-end-column="125" />
<state relative-caret-position="2205">
<caret line="166" column="50" selection-start-line="166" selection-start-column="50" selection-end-line="166" selection-end-column="50" />
<folding>
<element signature="e#907#1022#0" />
<element signature="e#1124#1419#0" />
<element signature="e#1449#1594#0" />
<element signature="e#1631#2625#0" />
<element signature="e#2666#3981#0" />
<element signature="e#4019#5013#0" />
<element signature="e#5051#7775#0" />
<element signature="e#5068#7666#0" />
<element signature="e#5671#6005#0" />
<element signature="e#6077#6467#0" />
<element signature="e#6575#6874#0" />
<element signature="e#6958#7208#0" />
<element signature="e#7357#7599#0" />
<element signature="e#7818#13652#0" />
<element signature="e#7836#13511#0" />
<element signature="e#7836#7861#0" />
<element signature="e#8535#8943#0" />
<element signature="e#9125#10304#0" />
<element signature="e#9150#9242#0" />
<element signature="e#9287#9900#0" />
<element signature="e#9453#9494#0" />
<element signature="e#9729#9900#0" />
<element signature="e#9855#9900#0" />
<element signature="e#10546#10620#0" />
<element signature="e#10678#10693#0" />
<element signature="e#10761#11507#0" />
<element signature="e#10929#11456#0" />
<element signature="e#11709#12320#0" />
<element signature="e#11942#12267#0" />
<element signature="e#12547#12806#0" />
<element signature="e#13560#13652#0" />
<element signature="e#13688#15519#0" />
<element signature="e#15560#17646#0" />
<element signature="e#17683#19518#0" />
<element signature="e#19556#20829#0" />
<element signature="e#20867#23355#0" />
<element signature="e#21629#21817#0" />
<element signature="e#21975#22024#0" />
<element signature="e#22067#22121#0" />
<element signature="e#22161#22211#0" />
<element signature="e#22501#22747#0" />
<element signature="e#22812#23210#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/homePage.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="30" column="47" selection-start-line="30" selection-start-column="47" selection-end-line="30" selection-end-column="47" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/baseTemplate/templates/baseTemplate/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="8850">
<caret line="590" column="104" selection-start-line="590" selection-start-column="104" selection-end-line="590" selection-end-column="104" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/IncScheduler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="21" column="8" selection-start-line="21" selection-start-column="8" selection-end-line="21" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/CyberCP/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="67" column="15" selection-start-line="67" selection-start-column="5" selection-end-line="67" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plogical/upgrade.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="277">
<caret line="1374" column="63" selection-start-line="1374" selection-start-column="63" selection-end-line="1374" selection-end-column="63" />
<folding>
<element signature="e#543#985#0" />
<element signature="e#1065#1663#0" />
<element signature="e#1082#1626#0" />
<element signature="e#1132#1602#0" />
<element signature="e#1225#1488#0" />
<element signature="e#1404#1488#0" />
<element signature="e#1531#1602#0" />
<element signature="e#1712#3223#0" />
<element signature="e#1730#3130#0" />
<element signature="e#3278#3918#0" />
<element signature="e#3296#3880#0" />
<element signature="e#3969#4406#0" />
<element signature="e#4456#5619#0" />
<element signature="e#4473#5571#0" />
<element signature="e#4565#4947#0" />
<element signature="e#4755#4907#0" />
<element signature="e#4983#5472#0" />
<element signature="e#5008#5423#0" />
<element signature="e#5201#5382#0" />
<element signature="e#5686#7123#0" />
<element signature="e#5703#7012#0" />
<element signature="e#6510#6783#0" />
<element signature="e#6569#6711#0" />
<element signature="e#7176#7423#0" />
<element signature="e#7492#11863#0" />
<element signature="e#7509#11732#0" />
<element signature="e#7604#8608#0" />
<element signature="e#7734#8028#0" />
<element signature="e#8274#8546#0" />
<element signature="e#8344#8466#0" />
<element signature="e#8873#9229#0" />
<element signature="e#9099#9181#0" />
<element signature="e#9320#9672#0" />
<element signature="e#9542#9624#0" />
<element signature="e#9873#10187#0" />
<element signature="e#10057#10139#0" />
<element signature="e#10279#10593#0" />
<element signature="e#10463#10545#0" />
<element signature="e#10929#11185#0" />
<element signature="e#10995#11113#0" />
<element signature="e#11522#11586#0" />
<element signature="e#11915#12656#0" />
<element signature="e#11932#12540#0" />
<element signature="e#12191#12428#0" />
<element signature="e#12588#12656#0" />
<element signature="e#12711#14202#0" />
<element signature="e#12728#14110#0" />
<element signature="e#14253#14969#0" />
<element signature="e#14492#14643#0" />
<element signature="e#14670#14808#0" />
<element signature="e#15017#15406#0" />
<element signature="e#15035#15302#0" />
<element signature="e#15345#15406#0" />
<element signature="e#15460#15783#0" />
<element signature="e#15837#16151#0" />
<element signature="e#15854#16118#0" />
<element signature="e#16213#17520#0" />
<element signature="e#16230#17423#0" />
<element signature="e#16508#17355#0" />
<element signature="e#16635#17355#0" />
<element signature="e#16803#17355#0" />
<element signature="e#17472#17520#0" />
<element signature="e#17586#22883#0" />
<element signature="e#17604#22782#0" />
<element signature="e#17697#19456#0" />
<element signature="e#19981#20113#0" />
<element signature="e#20355#20675#0" />
<element signature="e#20750#21125#0" />
<element signature="e#21526#21696#0" />
<element signature="e#21947#22171#0" />
<element signature="e#22941#29422#0" />
<element signature="e#22959#29321#0" />
<element signature="e#23039#23610#0" />
<element signature="e#23729#24112#0" />
<element signature="e#24231#24675#0" />
<element signature="e#24794#25399#0" />
<element signature="e#25518#25905#0" />
<element signature="e#26024#26472#0" />
<element signature="e#26607#27154#0" />
<element signature="e#27273#28045#0" />
<element signature="e#28164#28557#0" />
<element signature="e#28676#29130#0" />
<element signature="e#29482#32221#0" />
<element signature="e#29499#32188#0" />
<element signature="e#29592#29689#0" />
<element signature="e#29765#29845#0" />
<element signature="e#29921#30008#0" />
<element signature="e#30084#30229#0" />
<element signature="e#30292#30771#0" />
<element signature="e#30889#31451#0" />
<element signature="e#31569#31998#0" />
<element signature="e#32286#36035#0" />
<element signature="e#32303#36002#0" />
<element signature="e#32383#32571#0" />
<element signature="e#32689#33156#0" />
<element signature="e#33274#33819#0" />
<element signature="e#33938#34455#0" />
<element signature="e#34574#35180#0" />
<element signature="e#35299#35811#0" />
<element signature="e#36091#37190#0" />
<element signature="e#36108#37157#0" />
<element signature="e#36188#36816#0" />
<element signature="e#37249#38169#0" />
<element signature="e#37266#38136#0" />
<element signature="e#37346#37946#0" />
<element signature="e#38221#39442#0" />
<element signature="e#39505#40319#0" />
<element signature="e#39522#40286#0" />
<element signature="e#39602#39778#0" />
<element signature="e#40376#40780#0" />
<element signature="e#40394#40746#0" />
<element signature="e#57468#64110#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/install/install.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="962" column="43" selection-start-line="962" selection-start-column="43" selection-end-line="962" selection-end-column="43" />
<folding>
<element signature="e#0#10#0" expanded="true" />
<element signature="e#143696#150827#0" />
<element signature="e#150888#151548#0" />
<element signature="e#151611#152278#0" />
<element signature="e#152347#153095#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="338">
<caret line="572" column="71" selection-start-line="572" selection-start-column="71" selection-end-line="572" selection-end-column="71" />
<folding>
<element signature="e#816#1687#0" />
<element signature="e#1619#1687#0" />
<element signature="e#1739#2040#0" />
<element signature="e#2080#2148#0" />
<element signature="e#2183#5536#0" />
<element signature="e#18532#18600#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/IncBackups/templates/IncBackups/backupSchedule.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="97" lean-forward="true" selection-start-line="12" selection-start-column="97" selection-end-line="12" selection-end-column="97" />
<folding>
<element signature="e#500#539#0#HTML" expanded="true" />
</folding>
</state>
</provider>

View File

@@ -85,42 +85,78 @@ class IncJobs(multi.Thread):
except BaseException, msg:
logging.statusWriter(self.statusPath, "%s [46][5009]" % (str(msg)), 1)
logging.statusWriter(self.statusPath, "%s [88][5009]" % (str(msg)), 1)
return 0
def localFunction(self, backupPath, type, restore = None):
if restore == None:
command = 'restic -r %s backup %s --password-file %s' % (self.repoPath, backupPath, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
if type == 'database':
newSnapshot = JobSnapshots(job=self.jobid,
type='%s:%s' % (type, backupPath.split('/')[-1].strip('.sql')),
snapshotid=snapShotid,
destination=self.backupDestinations)
else:
newSnapshot = JobSnapshots(job=self.jobid, type='%s:%s' % (type, backupPath), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
else:
repoLocation = '/home/%s/incbackup' % (self.website)
command = 'restic -r %s restore %s --target / --password-file %s' % (
repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
def sftpFunction(self, backupPath, type, restore = None):
if restore == None:
remotePath = '/home/backup/%s' % (self.website.domain)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s backup %s --password-file %s --exclude %s' % (
self.backupDestinations, remotePath, backupPath, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
if type == 'database':
newSnapshot = JobSnapshots(job=self.jobid,
type='%s:%s' % (type, backupPath.split('/')[-1].strip('.sql')),
snapshotid=snapShotid,
destination=self.backupDestinations)
else:
newSnapshot = JobSnapshots(job=self.jobid, type='%s:%s' % (type, backupPath), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
else:
repoLocation = '/home/backup/%s' % (self.website)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s restore %s --target / --password-file %s' % (
self.jobid.destination, repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
def restoreData(self):
try:
if self.jobid.destination == 'local':
repoLocation = '/home/%s/incbackup' % (self.website)
command = 'restic -r %s restore %s --target / --password-file %s' % (repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.localFunction('none', 'none', 1)
elif self.jobid.destination[:4] == 'sftp':
repoLocation = '/home/backup/%s' % (self.website)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s restore %s --target / --password-file %s' % (self.jobid.destination, repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.sftpFunction('none', 'none', 1)
else:
self.awsFunction('restore', '', self.jobid.snapshotid)
except BaseException, msg:
logging.statusWriter(self.statusPath, "%s [46][5009]" % (str(msg)), 1)
logging.statusWriter(self.statusPath, "%s [138][5009]" % (str(msg)), 1)
return 0
def restoreDatabase(self):
try:
if self.jobid.destination == 'local':
repoLocation = '/home/%s/incbackup' % (self.website)
command = 'restic -r %s restore %s --target / --password-file %s' % (repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.localFunction('none', 'none', 1)
elif self.jobid.destination[:4] == 'sftp':
repoLocation = '/home/backup/%s' % (self.website)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s restore %s --target / --password-file %s' % (self.jobid.destination, repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.sftpFunction('none', 'none', 1)
else:
self.awsFunction('restore', '', self.jobid.snapshotid)
@@ -128,27 +164,21 @@ class IncJobs(multi.Thread):
raise BaseException
try:
os.remove('/home/cyberpanel/%s' % (self.jobid.type.split(':')[1]))
except:
pass
os.remove('/home/cyberpanel/%s.sql' % (self.jobid.type.split(':')[1]))
except BaseException, msg:
logging.writeToFile(str(msg))
except BaseException, msg:
logging.statusWriter(self.statusPath, "%s [46][5009]" % (str(msg)), 1)
logging.statusWriter(self.statusPath, "%s [160][5009]" % (str(msg)), 1)
return 0
def restoreEmail(self):
try:
if self.jobid.destination == 'local':
repoLocation = '/home/%s/incbackup' % (self.website)
command = 'restic -r %s restore %s --target / --password-file %s' % (repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.localFunction('none', 'none', 1)
elif self.jobid.destination[:4] == 'sftp':
repoLocation = '/home/backup/%s' % (self.website)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s restore %s --target / --password-file %s' % (self.jobid.destination, repoLocation, self.jobid.snapshotid, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
self.sftpFunction('none', 'none', 1)
else:
self.awsFunction('restore', '', self.jobid.snapshotid)
@@ -156,6 +186,27 @@ class IncJobs(multi.Thread):
logging.statusWriter(self.statusPath, "%s [46][5009]" % (str(msg)), 1)
return 0
def reconstructWithMeta(self):
try:
if self.jobid.destination == 'local':
self.localFunction('none', 'none', 1)
elif self.jobid.destination[:4] == 'sftp':
self.sftpFunction('none', 'none', 1)
else:
self.awsFunction('restore', '', self.jobid.snapshotid)
metaPathNew = '/home/%s/meta.xml' % (self.website)
execPath = "nice -n 10 /usr/local/CyberCP/bin/python2 " + virtualHostUtilities.cyberPanel + "/IncBackups/restoreMeta.py"
execPath = execPath + " submitRestore --metaPath %s --statusFile %s" % (metaPathNew, self.statusPath)
result = ProcessUtilities.outputExecutioner(execPath)
logging.statusWriter(self.statusPath, result, 1)
except BaseException, msg:
logging.statusWriter(self.statusPath, "%s [46][5009]" % (str(msg)), 1)
return 0
def restorePoint(self):
try:
self.statusPath = self.extraArgs['tempPath']
@@ -169,26 +220,6 @@ class IncJobs(multi.Thread):
self.passwordFile = '/home/%s/%s' % (self.website, self.website)
## Restore Meta first
metaPathNew = '/home/%s/meta.xml' % (self.website)
if self.jobid.destination == 'local':
repoLocation = '/home/%s/incbackup' % (self.website)
command = 'restic -r %s restore latest --target / --password-file %s --include %s' % (repoLocation, self.passwordFile, metaPathNew)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
elif self.jobid.destination[:4] == 'sftp':
repoLocation = '/home/backup/%s' % (self.website)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s restore latest --target / --password-file %s --include %s' % (self.jobid.destination, repoLocation, self.passwordFile, metaPathNew)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
## Reconstruct configs configs
if self.extraArgs['reconstruct']:
execPath = "nice -n 10 /usr/local/CyberCP/bin/python2 " + virtualHostUtilities.cyberPanel + "/IncBackups/restoreMeta.py"
execPath = execPath + " submitRestore --metaPath %s --statusFile %s" % (metaPathNew, self.statusPath)
ProcessUtilities.outputExecutioner(execPath)
##
if self.jobid.type[:8] == 'database':
@@ -205,11 +236,19 @@ class IncJobs(multi.Thread):
self.restoreEmail()
message = 'Emails restored.'
logging.statusWriter(self.statusPath, message, 1)
elif self.jobid.type[:4] == 'meta':
message = 'Reconstructing with meta..'
logging.statusWriter(self.statusPath, message, 1)
self.reconstructWithMeta()
message = 'Reconstructed'
logging.statusWriter(self.statusPath, message, 1)
logging.statusWriter(self.statusPath, 'Completed', 1)
except BaseException, msg:
logging.statusWriter(self.extraArgs['tempPath'], str(msg), 1)
### Backup functions
def prepareBackupMeta(self):
try:
@@ -385,29 +424,13 @@ class IncJobs(multi.Thread):
def backupData(self):
try:
logging.statusWriter(self.statusPath, 'Backing up data..', 1)
backupPath = '/home/%s' % (self.website.domain)
if self.backupDestinations == 'local':
backupPath = '/home/%s' % (self.website.domain)
command = 'restic -r %s backup %s --password-file %s --exclude %s' % (self.repoPath, backupPath, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='data:%s' % (backupPath), snapshotid=snapShotid, destination=self.backupDestinations)
newSnapshot.save()
self.localFunction(backupPath, 'data')
elif self.backupDestinations[:4] == 'sftp':
remotePath = '/home/backup/%s' % (self.website.domain)
backupPath = '/home/%s' % (self.website.domain)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s backup %s --password-file %s --exclude %s' % (self.backupDestinations, remotePath, backupPath, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='data:%s' % (remotePath), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
self.sftpFunction(backupPath, 'data')
else:
backupPath = '/home/%s' % (self.website.domain)
self.awsFunction('backup', backupPath, '', 'data')
logging.statusWriter(self.statusPath, 'Data for %s backed to %s.' % (self.website.domain, self.backupDestinations), 1)
@@ -429,31 +452,16 @@ class IncJobs(multi.Thread):
dbPath = '/home/cyberpanel/%s.sql' % (items.dbName)
if self.backupDestinations == 'local':
command = 'restic -r %s backup %s --password-file %s' % (self.repoPath, dbPath, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='database:%s' % (items.dbName), snapshotid=snapShotid, destination=self.backupDestinations)
newSnapshot.save()
self.localFunction(dbPath, 'database')
elif self.backupDestinations[:4] == 'sftp':
remotePath = '/home/backup/%s' % (self.website.domain)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s backup %s --password-file %s --exclude %s' % (
self.backupDestinations, remotePath, dbPath, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='database:%s' % (items.dbName), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
self.sftpFunction(dbPath, 'database')
else:
self.awsFunction('backup', dbPath, '', 'database')
try:
os.remove('/home/cyberpanel/%s' % (items.dbName))
except:
pass
os.remove('/home/cyberpanel/%s.sql' % (items.dbName))
except BaseException, msg:
logging.statusWriter(self.statusPath,'Failed to delete database: %s. [IncJobs.backupDatabases.456]' % str(msg), 1)
return 1
except BaseException, msg:
logging.statusWriter(self.statusPath,'%s. [IncJobs.backupDatabases.269][5009]' % str(msg), 1)
@@ -466,26 +474,9 @@ class IncJobs(multi.Thread):
backupPath = '/home/vmail/%s' % (self.website.domain)
if self.backupDestinations == 'local':
command = 'restic -r %s backup %s --password-file %s' % (
self.repoPath, backupPath, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='email:%s' % (backupPath), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
self.localFunction(backupPath, 'email')
elif self.backupDestinations[:4] == 'sftp':
remotePath = '/home/backup/%s' % (self.website.domain)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s backup %s --password-file %s --exclude %s' % (
self.backupDestinations, remotePath, backupPath, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
snapShotid = result.split(' ')[-2]
newSnapshot = JobSnapshots(job=self.jobid, type='email:%s' % (backupPath), snapshotid=snapShotid,
destination=self.backupDestinations)
newSnapshot.save()
self.sftpFunction(backupPath, 'email')
else:
self.awsFunction('backup', backupPath, '', 'email')
@@ -496,6 +487,26 @@ class IncJobs(multi.Thread):
logging.statusWriter(self.statusPath,'%s. [IncJobs.emailBackup.269][5009]' % str(msg), 1)
return 0
def metaBackup(self):
try:
logging.statusWriter(self.statusPath, 'Backing up meta..', 1)
backupPath = '/home/%s/meta.xml' % (self.website.domain)
if self.backupDestinations == 'local':
self.localFunction(backupPath, 'meta')
elif self.backupDestinations[:4] == 'sftp':
self.sftpFunction(backupPath, 'meta')
else:
self.awsFunction('backup', backupPath, '', 'meta')
logging.statusWriter(self.statusPath, 'Meta for %s backed to %s.' % (self.website.domain, self.backupDestinations), 1)
return 1
except BaseException, msg:
logging.statusWriter(self.statusPath,'%s. [IncJobs.metaBackup.269][5009]' % str(msg), 1)
return 0
def initiateRepo(self):
try:
logging.statusWriter(self.statusPath, 'Will first initiate backup repo..', 1)
@@ -548,6 +559,9 @@ class IncJobs(multi.Thread):
command = 'echo "%s" > %s' % (password, self.passwordFile)
ProcessUtilities.executioner(command, self.website.externalApp)
command = 'chmod 600 %s' % (self.passwordFile)
ProcessUtilities.executioner(command)
if self.initiateRepo() == 0:
return
@@ -567,27 +581,14 @@ class IncJobs(multi.Thread):
if self.emailBackup() == 0:
return
## meta generated
logging.statusWriter(self.statusPath, 'Taking backup of meta file, this file can be used to reconstruct at later point..', 1)
self.metaBackup()
metaPathNew = '/home/%s/meta.xml' % (self.website.domain)
if self.backupDestinations == 'local':
command = 'restic -r %s backup %s --password-file %s' % (
self.repoPath, metaPathNew, self.passwordFile)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
elif self.backupDestinations[:4] == 'sftp':
remotePath = '/home/backup/%s' % (self.website.domain)
command = 'export PATH=${PATH}:/usr/bin && restic -r %s:%s backup %s --password-file %s --exclude %s' % (
self.backupDestinations, remotePath, metaPathNew, self.passwordFile, self.repoPath)
result = ProcessUtilities.outputExecutioner(command)
logging.statusWriter(self.statusPath, result, 1)
try:
os.remove(metaPathNew)
except:
pass
command = 'rm -f %s' % (metaPathNew)
ProcessUtilities.executioner(command)
except BaseException, msg:
logging.statusWriter(self.statusPath,'Failed to delete meta file: %s. [IncJobs.createBackup.591]' % str(msg), 1)
logging.statusWriter(self.statusPath, 'Completed', 1)

View File

@@ -10,7 +10,7 @@
<div class="container">
<div id="page-title">
<h2>{% trans "Schedule Back up" %} - <a target="_blank" href="http://go.cyberpanel.net/remote-backup"
<h2>{% trans "Schedule Back up" %} - <a target="_blank" href="http://cyberpanel.net/"
style="height: 23px;line-height: 21px;"
class="btn btn-border btn-alt border-red btn-link font-red"
title=""><span>{% trans "Remote Backups" %}</span></a></h2>

View File

@@ -10,7 +10,7 @@
<div class="container">
<div id="page-title">
<h2>{% trans "Back up Website" %} - <a target="_blank" href="http://go.cyberpanel.net/backup"
<h2>{% trans "Back up Website" %} - <a target="_blank" href="https://cyberpanel.net/docs/2-create-restore-incremental-backups/"
style="height: 23px;line-height: 21px;"
class="btn btn-border btn-alt border-red btn-link font-red" title=""><span>{% trans "Backup Docs" %}</span></a>
</h2>
@@ -174,8 +174,6 @@
<td>
<a ng-click="restorePoint(job.id, 0)" class="btn btn-border btn-alt border-green btn-link font-green"
title=""><span>Restore</span></a>
<a ng-click="restorePoint(job.id, 1)" class="btn btn-border btn-alt border-green btn-link font-green"
title=""><span>Restore and Reconstruct</span></a>
</td>
</tr>
</tbody>

View File

@@ -12,7 +12,7 @@
<div class="container">
<div id="page-title">
<h2>{% trans "Set up Incremental Back up Destinations" %} - <a target="_blank"
href="http://go.cyberpanel.net/remote-backup"
href="https://cyberpanel.net/docs/1-add-remove-destinations-for-incremental-backups/"
style="height: 23px;line-height: 21px;"
class="btn btn-border btn-alt border-red btn-link font-red"
title=""><span>{% trans "Remote Backups" %}</span></a>

View File

@@ -3,7 +3,7 @@ from __future__ import unicode_literals
from django.shortcuts import render
from plogical.acl import ACLManager
from django.shortcuts import HttpResponse
from django.shortcuts import HttpResponse, redirect
from plogical.processUtilities import ProcessUtilities
from plogical.virtualHostUtilities import virtualHostUtilities
import json
@@ -15,6 +15,7 @@ from .IncBackupsControl import IncJobs
from random import randint
import time
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
from loginSystem.views import loadLoginPage
# Create your views here.
@@ -36,17 +37,19 @@ def createBackup(request):
path = '/home/cyberpanel/sftp'
for items in os.listdir(path):
destinations.append('sftp:%s' % (items))
if os.path.exists(path):
for items in os.listdir(path):
destinations.append('sftp:%s' % (items))
path = '/home/cyberpanel/aws'
for items in os.listdir(path):
destinations.append('s3:s3.amazonaws.com/%s' % (items))
if os.path.exists(path):
for items in os.listdir(path):
destinations.append('s3:s3.amazonaws.com/%s' % (items))
return defRenderer(request, 'IncBackups/createBackup.html', {'websiteList': websitesName, 'destinations': destinations})
except BaseException, msg:
return HttpResponse(str(msg))
logging.writeToFile(str(msg))
return redirect(loadLoginPage)
def backupDestinations(request):
try:
@@ -58,7 +61,8 @@ def backupDestinations(request):
return defRenderer(request, 'IncBackups/incrementalDestinations.html', {})
except BaseException, msg:
return HttpResponse(str(msg))
logging.writeToFile(str(msg))
return redirect(loadLoginPage)
def addDestination(request):
try:
@@ -559,15 +563,19 @@ def scheduleBackups(request):
path = '/home/cyberpanel/sftp'
for items in os.listdir(path):
destinations.append('sftp:%s' % (items))
if os.path.exists(path):
for items in os.listdir(path):
destinations.append('sftp:%s' % (items))
for items in os.listdir(path):
destinations.append('s3:s3.amazonaws.com/%s' % (items))
path = '/home/cyberpanel/aws'
if os.path.exists(path):
for items in os.listdir(path):
destinations.append('s3:s3.amazonaws.com/%s' % (items))
return defRenderer(request, 'IncBackups/backupSchedule.html', {'websiteList': websitesName, 'destinations': destinations})
except BaseException, msg:
return HttpResponse(str(msg))
logging.writeToFile(str(msg))
return redirect(loadLoginPage)
def submitBackupSchedule(request):
try:

View File

@@ -588,7 +588,7 @@
<li>
<a href="{% url 'loadBackupHome' %}" title="{% trans 'Incremental Back up' %}">
<a href="{% url 'loadBackupHome' %}" title="{% trans 'Incremental Back up - Beta' %}">
<i class="glyph-icon tooltip-button icon-copy" title=".icon-folder"></i>
<span>{% trans "Incremental Back up" %}</span>
</a>
@@ -596,10 +596,10 @@
<ul>
<li class="createBackup"><a href="{% url 'createBackupInc' %}"
title="{% trans 'Create Back up' %}"><span>{% trans "Create Back up" %}</span></a>
title="{% trans 'Create Back up' %}"><span>{% trans "Create/Restore Back up" %}</span></a>
</li>
<li class="restoreBackup"><a href="{% url 'backupDestinationsInc' %}"
title="{% trans 'Restore Back up' %}"><span>{% trans "Add Destinations" %}</span></a>
title="{% trans 'Restore Back up' %}"><span>{% trans "Add/Remove Destinations" %}</span></a>
</li>
<li class="restoreBackup"><a href="{% url 'scheduleBackupsInc' %}"
title="{% trans 'Schedule Back ups' %}"><span>{% trans "Schedule Back ups" %}</span></a>

View File

@@ -951,7 +951,7 @@ class preFlightsChecks:
os.chdir(self.path)
command = "wget http://cyberpanel.sh/CyberPanel.1.9.0.tar.gz"
command = "wget http://cyberpanel.sh/CyberPanel.1.9.1.tar.gz"
# command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'CyberPanel Download',
@@ -960,7 +960,7 @@ class preFlightsChecks:
##
count = 0
command = "tar zxf CyberPanel.1.9.0.tar.gz"
command = "tar zxf CyberPanel.1.9.1.tar.gz"
# command = "tar zxf CyberPanelTemp.tar.gz"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'Extract CyberPanel', 1, 1, os.EX_OSERR)
@@ -1051,7 +1051,7 @@ class preFlightsChecks:
path = "/usr/local/CyberCP/version.txt"
writeToFile = open(path, 'w')
writeToFile.writelines('1.9\n')
writeToFile.writelines('0')
writeToFile.writelines('1')
writeToFile.close()
except:
pass
@@ -3689,6 +3689,51 @@ milter_default_action = accept
except:
pass
def installRestic(self):
try:
CentOSPath = '/etc/redhat-release'
if os.path.exists(CentOSPath):
command = 'yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo'
preFlightsChecks.call(command, self.distro, '[installRestic]',
'Add restic repo.',
1, 0, os.EX_OSERR)
command = 'yum install restic -y'
preFlightsChecks.call(command, self.distro, '[installRestic]',
'Install Restic.',
1, 0, os.EX_OSERR)
else:
command = 'apt-get update -y'
preFlightsChecks.call(command, self.distro, '[installRestic]',
'Install Restic.',
1, 0, os.EX_OSERR)
command = 'apt-get install restic -y'
preFlightsChecks.call(command, self.distro, '[installRestic]',
'Install Restic.',
1, 0, os.EX_OSERR)
cronTab = '/etc/crontab'
data = open(cronTab, 'r').read()
if data.find('IncScheduler') == -1:
cronJob = '0 12 * * * root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily'
writeToFile = open(cronTab, 'a')
writeToFile.writelines(cronJob)
cronJob = '0 0 * * 0 root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily'
writeToFile.writelines(cronJob)
writeToFile.close()
except:
pass
def main():
parser = argparse.ArgumentParser(description='CyberPanel Installer')
@@ -3813,6 +3858,7 @@ def main():
checks.download_install_phpmyadmin()
checks.setupCLI()
checks.setup_cron()
checks.installRestic()
# checks.installdnsPython()
## Install and Configure OpenDKIM.

View File

@@ -218,7 +218,7 @@ def loadLoginPage(request):
firstName="Cyber",lastName="Panel", acl=acl, token=token)
admin.save()
vers = version(currentVersion="1.9", build=0)
vers = version(currentVersion="1.9", build=1)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -31,7 +31,7 @@ def main():
firstName="Cyber", lastName="Panel", acl=acl, token=token)
admin.save()
vers = version(currentVersion="1.9", build=0)
vers = version(currentVersion="1.9", build=1)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -1175,6 +1175,73 @@ class Upgrade:
except:
pass
@staticmethod
def IncBackupMigrations():
try:
connection, cursor = Upgrade.setupConnection('cyberpanel')
query = """CREATE TABLE `IncBackups_backupjob` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`destination` varchar(300) NOT NULL,
`frequency` varchar(50) NOT NULL,
`websiteData` int(11) NOT NULL,
`websiteDatabases` int(11) NOT NULL,
`websiteDataEmails` int(11) NOT NULL,
PRIMARY KEY (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `IncBackups_incjob` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime(6) NOT NULL,
`website_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `IncBackups_incjob_website_id_aad31bf6_fk_websiteFu` (`website_id`),
CONSTRAINT `IncBackups_incjob_website_id_aad31bf6_fk_websiteFu` FOREIGN KEY (`website_id`) REFERENCES `websiteFunctions_websites` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `IncBackups_jobsites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`website` varchar(300) NOT NULL,
`job_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `IncBackups_jobsites_job_id_494a1f69_fk_IncBackups_backupjob_id` (`job_id`),
CONSTRAINT `IncBackups_jobsites_job_id_494a1f69_fk_IncBackups_backupjob_id` FOREIGN KEY (`job_id`) REFERENCES `IncBackups_backupjob` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
query = """CREATE TABLE `IncBackups_jobsnapshots` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(300) NOT NULL,
`snapshotid` varchar(50) NOT NULL,
`job_id` int(11) NOT NULL,
`destination` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `IncBackups_jobsnapshots_job_id_a8237ca8_fk_IncBackups_incjob_id` (`job_id`),
CONSTRAINT `IncBackups_jobsnapshots_job_id_a8237ca8_fk_IncBackups_incjob_id` FOREIGN KEY (`job_id`) REFERENCES `IncBackups_incjob` (`id`)
)"""
try:
cursor.execute(query)
except:
pass
try:
connection.close()
except:
pass
except:
pass
@staticmethod
def enableServices():
try:
@@ -1267,6 +1334,11 @@ class Upgrade:
if items.find('CLManager') > -1:
CLManager = 0
IncBackups = 1
for items in data:
if items.find('IncBackups') > -1:
IncBackups = 0
Upgrade.stdOut('Restoring settings file!')
writeToFile = open("/usr/local/CyberCP/CyberCP/settings.py", 'w')
@@ -1295,9 +1367,13 @@ class Upgrade:
if manageServices == 1:
writeToFile.writelines(" 'manageServices',\n")
if CLManager == 1:
writeToFile.writelines(" 'CLManager',\n")
if IncBackups == 1:
writeToFile.writelines(" 'IncBackups',\n")
else:
writeToFile.writelines(items)
@@ -1542,7 +1618,6 @@ class Upgrade:
Upgrade.executioner(command, 'Set default PHP 7.0, 0')
@staticmethod
def someDirectories():
command = "mkdir -p /usr/local/lscpd/admin/"
@@ -1741,6 +1816,37 @@ failovermethod=priority
except BaseException, msg:
Upgrade.stdOut(str(msg) + " [upgradeDovecot]")
@staticmethod
def installRestic():
CentOSPath = '/etc/redhat-release'
if os.path.exists(CentOSPath):
command = 'yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo'
Upgrade.executioner(command, 'Add restic repo.')
command = 'yum install restic -y'
Upgrade.executioner(command, 'Install Restic')
else:
command = 'apt-get update -y'
Upgrade.executioner(command, 'Install Restic')
command = 'apt-get install restic -y'
Upgrade.executioner(command, 'Install Restic')
cronTab = '/etc/crontab'
data = open(cronTab, 'r').read()
if data.find('IncScheduler') == -1:
cronJob = '0 12 * * * root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily'
writeToFile = open(cronTab, 'a')
writeToFile.writelines(cronJob)
cronJob = '0 0 * * 0 root /usr/local/CyberCP/bin/python2 /usr/local/CyberCP/IncBackups/IncScheduler.py Daily'
writeToFile.writelines(cronJob)
writeToFile.close()
@staticmethod
def upgrade():
@@ -1796,6 +1902,8 @@ failovermethod=priority
Upgrade.emailMarketingMigrationsa()
Upgrade.dockerMigrations()
Upgrade.CLMigrations()
Upgrade.IncBackupMigrations()
Upgrade.installRestic()
##

View File

@@ -12,6 +12,7 @@ import shlex
from plogical.virtualHostUtilities import virtualHostUtilities
from plogical.acl import ACLManager
from plogical.processUtilities import ProcessUtilities
import os
# Create your views here.
@@ -130,9 +131,15 @@ def getLogsFromFile(request):
elif type == "error":
fileName = installUtilities.Server_root_path + "/logs/error.log"
elif type == "email":
fileName = "/var/log/maillog"
if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
fileName = "/var/log/maillog"
else:
fileName = "/var/log/mail.log"
elif type == "ftp":
fileName = "/var/log/messages"
if ProcessUtilities.decideDistro() == ProcessUtilities.centos:
fileName = "/var/log/messages"
else:
fileName = "/var/log/syslog"
elif type == "modSec":
fileName = "/usr/local/lsws/logs/auditmodsec.log"
elif type == "cyberpanel":
@@ -195,4 +202,4 @@ def clearLogFile(request):
logging.CyberCPLogFileWriter.writeToFile(str(msg))
data_ret = {'cleanStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
return HttpResponse(json_data)

View File

@@ -0,0 +1,745 @@
//*** Backup site ****//
app.controller('createIncrementalBackups', function ($scope, $http, $timeout) {
$scope.destination = true;
$scope.backupButton = true;
$scope.cyberpanelLoading = true;
$scope.runningBackup = true;
$scope.restoreSt = true;
$scope.fetchDetails = function () {
getBackupStatus();
$scope.populateCurrentRecords();
$scope.destination = false;
$scope.runningBackup = true;
};
function getBackupStatus() {
$scope.cyberpanelLoadingBottom = false;
url = "/IncrementalBackups/getBackupStatus";
var data = {
websiteToBeBacked: $scope.websiteToBeBacked,
tempPath: $scope.tempPath
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.backupStatus === 1) {
if (response.data.abort === 1) {
$timeout.cancel();
$scope.cyberpanelLoadingBottom = true;
$scope.destination = false;
$scope.runningBackup = false;
$scope.backupButton = false;
$scope.cyberpanelLoading = true;
$scope.fileName = response.data.fileName;
$scope.status = response.data.status;
$scope.populateCurrentRecords();
return;
} else {
$scope.destination = true;
$scope.backupButton = true;
$scope.runningBackup = false;
$scope.fileName = response.data.fileName;
$scope.status = response.data.status;
$timeout(getBackupStatus, 2000);
}
} else {
$timeout.cancel();
$scope.cyberpanelLoadingBottom = true;
$scope.cyberpanelLoading = true;
$scope.backupButton = false;
}
}
function cantLoadInitialDatas(response) {
}
}
$scope.destinationSelection = function () {
$scope.backupButton = false;
};
$scope.populateCurrentRecords = function () {
url = "/IncrementalBackups/fetchCurrentBackups";
var data = {
websiteToBeBacked: $scope.websiteToBeBacked,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.status === 1) {
$scope.records = JSON.parse(response.data.data);
} else {
new PNotify({
title: 'Error!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.createBackup = function () {
$scope.status = '';
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/submitBackupCreation";
var data = {
websiteToBeBacked: $scope.websiteToBeBacked,
backupDestinations: $scope.backupDestinations,
websiteData: $scope.websiteData,
websiteEmails: $scope.websiteEmails,
websiteSSLs: $scope.websiteSSLs,
websiteDatabases: $scope.websiteDatabases
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.status === 1) {
$scope.tempPath = response.data.tempPath;
getBackupStatus();
} else {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
}
};
$scope.deleteBackup = function (id) {
url = "/IncrementalBackups/deleteBackup";
var data = {
backupID: id,
websiteToBeBacked: $scope.websiteToBeBacked
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.status === 1) {
$scope.populateCurrentRecords();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
}
};
$scope.restore = function (id) {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/fetchRestorePoints";
var data = {
id: id,
websiteToBeBacked: $scope.websiteToBeBacked
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.jobs = JSON.parse(response.data.data);
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.restorePoint = function (id, reconstruct) {
$scope.status = '';
$scope.cyberpanelLoading = false;
$scope.restoreSt = false;
url = "/IncrementalBackups/restorePoint";
var data = {
websiteToBeBacked: $scope.websiteToBeBacked,
jobid: id,
reconstruct: reconstruct
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
if (response.data.status === 1) {
$scope.tempPath = response.data.tempPath;
getBackupStatus();
}
}
function cantLoadInitialDatas(response) {
}
};
});
///** Backup site ends **///
app.controller('incrementalDestinations', function ($scope, $http) {
$scope.cyberpanelLoading = true;
$scope.sftpHide = true;
$scope.awsHide = true;
$scope.fetchDetails = function () {
if ($scope.destinationType === 'SFTP') {
$scope.sftpHide = false;
$scope.awsHide = true;
$scope.populateCurrentRecords();
} else {
$scope.sftpHide = true;
$scope.awsHide = false;
$scope.populateCurrentRecords();
}
};
$scope.populateCurrentRecords = function () {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/populateCurrentRecords";
var type = 'SFTP';
if ($scope.destinationType === 'SFTP') {
type = 'SFTP';
} else {
type = 'AWS';
}
var data = {
type: type
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.records = JSON.parse(response.data.data);
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.addDestination = function (type) {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/addDestination";
if (type === 'SFTP') {
var data = {
type: type,
IPAddress: $scope.IPAddress,
password: $scope.password,
backupSSHPort: $scope.backupSSHPort
};
} else {
var data = {
type: type,
AWS_ACCESS_KEY_ID: $scope.AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY: $scope.AWS_SECRET_ACCESS_KEY,
};
}
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
$scope.populateCurrentRecords();
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'Destination successfully added.',
type: 'success'
});
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.removeDestination = function (type, ipAddress) {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/removeDestination";
var data = {
type: type,
IPAddress: ipAddress,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
$scope.populateCurrentRecords();
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'Destination successfully removed.',
type: 'success'
});
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
});
app.controller('scheduleBackupInc', function ($scope, $http) {
var globalPageNumber;
$scope.scheduleFreq = true;
$scope.cyberpanelLoading = true;
$scope.getFurtherWebsitesFromDB = function (pageNumber) {
$scope.cyberpanelLoading = false;
globalPageNumber = pageNumber;
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
var data = {page: pageNumber};
dataurl = "/CloudLinux/submitWebsiteListing";
$http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
if (response.data.listWebSiteStatus === 1) {
var finalData = JSON.parse(response.data.data);
$scope.WebSitesList = finalData;
$scope.pagination = response.data.pagination;
$scope.default = response.data.default;
$("#listFail").hide();
} else {
$("#listFail").fadeIn();
$scope.errorMessage = response.data.error_message;
console.log(response.data);
}
}
function cantLoadInitialData(response) {
$scope.cyberpanelLoading = true;
}
};
var websitesToBeBacked = [];
var websitesToBeBackedTemp = [];
var index = 0;
var tempTransferDir = "";
$scope.addRemoveWebsite = function (website, websiteStatus) {
if (websiteStatus === true) {
var check = 1;
for (var j = 0; j < websitesToBeBacked.length; j++) {
if (websitesToBeBacked[j] == website) {
check = 0;
break;
}
}
if (check == 1) {
websitesToBeBacked.push(website);
}
} else {
var tempArray = [];
for (var j = 0; j < websitesToBeBacked.length; j++) {
if (websitesToBeBacked[j] != website) {
tempArray.push(websitesToBeBacked[j]);
}
}
websitesToBeBacked = tempArray;
}
};
$scope.allChecked = function (webSiteStatus) {
if (webSiteStatus === true) {
websitesToBeBacked = websitesToBeBackedTemp;
$scope.webSiteStatus = true;
} else {
websitesToBeBacked = [];
$scope.webSiteStatus = false;
}
};
$scope.scheduleFreqView = function () {
$scope.scheduleFreq = false;
$scope.getFurtherWebsitesFromDB(1);
};
$scope.addSchedule = function () {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/submitBackupSchedule";
var data = {
backupDestinations: $scope.backupDest,
backupFreq: $scope.backupFreq,
websiteData: $scope.websiteData,
websiteEmails: $scope.websiteEmails,
websiteDatabases: $scope.websiteDatabases,
websitesToBeBacked: websitesToBeBacked
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
$scope.populateCurrentRecords();
if (response.data.status === 1) {
new PNotify({
title: 'Success!',
text: 'Destination successfully removed.',
type: 'success'
});
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.populateCurrentRecords = function () {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/getCurrentBackupSchedules";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.records = JSON.parse(response.data.data);
var parsed = JSON.parse(response.data.data);
for (var j = 0; j < parsed.length; j++) {
websitesToBeBackedTemp.push(parsed[j].website);
}
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
$scope.populateCurrentRecords();
$scope.delSchedule = function (id) {
$scope.cyberpanelLoading = false;
url = "/IncrementalBackups/scheduleDelete";
var data = {id: id};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
$scope.populateCurrentRecords();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialDatas(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page',
type: 'error'
});
}
};
});