mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-27 07:17:10 +00:00
Merge branch 'dev' of ssh://172.10.10.9:2001/opt/jumpserver into dev
This commit is contained in:
commit
d036ef7f0a
@ -1 +0,0 @@
|
||||
jumpserver
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
|
||||
</project>
|
||||
|
@ -1,7 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0" is_locked="false">
|
||||
<option name="myName" value="Project Default" />
|
||||
<option name="myLocal" value="false" />
|
||||
<inspection_tool class="SqlDialectInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
</component>
|
@ -1,7 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="PROJECT_PROFILE" value="Project Default" />
|
||||
<option name="USE_PROJECT_PROFILE" value="true" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 2.7.6 (C:/Python27/python.exe)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (C:/Python27/python.exe)" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/jumpserver.iml" filepath="$PROJECT_DIR$/.idea/jumpserver.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
|
@ -1,5 +0,0 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<state>
|
||||
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
|
||||
</state>
|
||||
</component>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
@ -1,793 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="3a3feb99-ffa7-4370-b111-c1793a147bed" name="Default" comment="">
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/jumpserver.iml" afterPath="$PROJECT_DIR$/.idea/jumpserver.iml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/jumpserver.py" afterPath="$PROJECT_DIR$/jumpserver.py" />
|
||||
</list>
|
||||
<ignored path="jumpserver.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
|
||||
<component name="CreatePatchCommitExecutor">
|
||||
<option name="PATCH_PATH" value="" />
|
||||
</component>
|
||||
<component name="DaemonCodeAnalyzer">
|
||||
<disable_hints />
|
||||
</component>
|
||||
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
|
||||
<component name="FavoritesManager">
|
||||
<favorites_list name="jumpserver" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file leaf-file-name="views.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="38" column="0" selection-start="1129" selection-end="1129" vertical-scroll-proportion="0.0" vertical-offset="418" max-vertical-offset="19817">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="jumpserver.py" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="111" column="39" selection-start="3028" selection-end="3028" vertical-scroll-proportion="-5.6809607" vertical-offset="5421" max-vertical-offset="6004">
|
||||
<folding>
|
||||
<element signature="e#36#45#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="models.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/UserManage/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="28" column="4" selection-start="848" selection-end="855" vertical-scroll-proportion="0.0" vertical-offset="532" max-vertical-offset="1026">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="urls.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="35" column="43" selection-start="1202" selection-end="1202" vertical-scroll-proportion="0.0" vertical-offset="665" max-vertical-offset="817">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="settings.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="56" column="48" selection-start="1521" selection-end="1521" vertical-scroll-proportion="0.0" vertical-offset="1064" max-vertical-offset="2451">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="showUser.html" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showUser.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="31" column="40" selection-start="1091" selection-end="1091" vertical-scroll-proportion="0.0" vertical-offset="386" max-vertical-offset="1083">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="showSudo.html" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showSudo.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="13" column="32" selection-start="437" selection-end="437" vertical-scroll-proportion="0.0" vertical-offset="247" max-vertical-offset="456">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="jumpserver.conf" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.conf">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="17" column="33" selection-start="359" selection-end="359" vertical-scroll-proportion="0.0" vertical-offset="323" max-vertical-offset="437">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="upFile.html" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/upFile.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="45" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="912">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="log_handler.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/log_handler.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="82" column="17" selection-start="2150" selection-end="2150" vertical-scroll-proportion="0.0" vertical-offset="1558" max-vertical-offset="1938">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FindManager">
|
||||
<FindUsagesManager>
|
||||
<setting name="OPEN_NEW_TAB" value="false" />
|
||||
</FindUsagesManager>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="changedFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/shell.conf" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/index.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/Assets/models.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/UserManage/forms.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/chgKey.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/error.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/addGroup.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/showGroup.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/chgGroup.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/chgUser.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/chgPass.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/chgSudo.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/showSudo.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/info.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/upFile.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/downFile.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/addAssets.html" />
|
||||
<option value="$PROJECT_DIR$/pip-requirement.txt" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/AutoSa/settings.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/AutoSa/templatetags/mytags.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/loghandler.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/logHistory.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/base.html" />
|
||||
<option value="$PROJECT_DIR$/scripts/pip-requirement.txt" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/UserManage/models.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/AutoSa/urls.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/showUser.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/addUser.html" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/log_handler.py" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/templates/logView.html" />
|
||||
<option value="$PROJECT_DIR$/jumpserver.conf" />
|
||||
<option value="$PROJECT_DIR$/webroot/AutoSa/AutoSa/views.py" />
|
||||
<option value="$PROJECT_DIR$/jumpserver.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="x" value="-8" />
|
||||
<option name="y" value="-8" />
|
||||
<option name="width" value="1382" />
|
||||
<option name="height" value="744" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
<OptionsSetting value="true" id="Update" />
|
||||
<OptionsSetting value="true" id="Status" />
|
||||
<OptionsSetting value="true" id="Edit" />
|
||||
<ConfirmationsSetting value="2" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectReloadState">
|
||||
<option name="STATE" value="0" />
|
||||
</component>
|
||||
<component name="ProjectView">
|
||||
<navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
|
||||
<flattenPackages />
|
||||
<showMembers />
|
||||
<showModules />
|
||||
<showLibraryContents />
|
||||
<hideEmptyPackages />
|
||||
<abbreviatePackageNames />
|
||||
<autoscrollToSource />
|
||||
<autoscrollFromSource />
|
||||
<sortByType />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="webroot" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="jumpserver" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="webroot" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="AutoSa" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
</subPane>
|
||||
</pane>
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="options.lastSelected" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
|
||||
<property name="options.splitter.main.proportions" value="0.3" />
|
||||
<property name="options.splitter.details.proportions" value="0.2" />
|
||||
<property name="options.searchVisible" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="FullScreen" value="false" />
|
||||
<property name="DefaultHtmlFileTemplate" value="Html5" />
|
||||
<property name="SearchEverywhereHistory" value=" 《" />
|
||||
</component>
|
||||
<component name="PyConsoleOptionsProvider">
|
||||
<option name="myPythonConsoleState">
|
||||
<console-settings is-module-sdk="true">
|
||||
<option name="myUseModuleSdk" value="true" />
|
||||
</console-settings>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="C:\Users\ThinkPad\jumpserver\webroot\AutoSa" />
|
||||
<recent name="C:\Users\ThinkPad\jumpserver\webroot\AutoSa\AutoSa" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="TARGET" value="" />
|
||||
<option name="SETTINGS_FILE" value="" />
|
||||
<option name="CUSTOM_SETTINGS" value="false" />
|
||||
<option name="USE_OPTIONS" value="false" />
|
||||
<option name="OPTIONS" value="" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="py.test">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="FOLDER_NAME" value="" />
|
||||
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||
<option name="PATTERN" value="" />
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<option name="testToRun" value="" />
|
||||
<option name="keywords" value="" />
|
||||
<option name="params" value="" />
|
||||
<option name="USE_PARAM" value="false" />
|
||||
<option name="USE_KEYWORD" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="Nosetests">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="FOLDER_NAME" value="" />
|
||||
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||
<option name="PATTERN" value="" />
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<option name="PARAMS" value="" />
|
||||
<option name="USE_PARAM" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="Unittests">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="FOLDER_NAME" value="" />
|
||||
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||
<option name="PATTERN" value="" />
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<option name="PUREUNITTEST" value="true" />
|
||||
<option name="PARAMS" value="" />
|
||||
<option name="USE_PARAM" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug" singleton="true">
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="Doctests">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="FOLDER_NAME" value="" />
|
||||
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||
<option name="PATTERN" value="" />
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="Attests">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="jumpserver" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="CLASS_NAME" value="" />
|
||||
<option name="METHOD_NAME" value="" />
|
||||
<option name="FOLDER_NAME" value="" />
|
||||
<option name="TEST_TYPE" value="TEST_SCRIPT" />
|
||||
<option name="PATTERN" value="" />
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
<list size="0" />
|
||||
</component>
|
||||
<component name="ShelveChangesManager" show_recycled="false" />
|
||||
<component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false" SSL_PROTOCOLS="all">
|
||||
<option name="USER" value="" />
|
||||
<option name="PASSWORD" value="" />
|
||||
<option name="mySSHConnectionTimeout" value="30000" />
|
||||
<option name="mySSHReadTimeout" value="30000" />
|
||||
<option name="LAST_MERGED_REVISION" />
|
||||
<option name="MERGE_DRY_RUN" value="false" />
|
||||
<option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
|
||||
<option name="UPDATE_LOCK_ON_DEMAND" value="false" />
|
||||
<option name="IGNORE_SPACES_IN_MERGE" value="false" />
|
||||
<option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
|
||||
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
|
||||
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
|
||||
<option name="FORCE_UPDATE" value="false" />
|
||||
<option name="IGNORE_EXTERNALS" value="false" />
|
||||
<myIsUseDefaultProxy>false</myIsUseDefaultProxy>
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="3a3feb99-ffa7-4370-b111-c1793a147bed" name="Default" comment="" />
|
||||
<created>1410786645479</created>
|
||||
<updated>1410786645479</updated>
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.14787701" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="Vcs.Log.UiProperties">
|
||||
<option name="RECENTLY_FILTERED_USER_GROUPS">
|
||||
<collection />
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="myTodoPanelSettings">
|
||||
<TodoPanelSettings />
|
||||
</option>
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/downFile.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="27" column="18" selection-start="1290" selection-end="1290" vertical-scroll-proportion="0.0" vertical-offset="105" max-vertical-offset="798">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="61" column="20" selection-start="1546" selection-end="1546" vertical-scroll-proportion="0.0" vertical-offset="1159" max-vertical-offset="5757">
|
||||
<folding>
|
||||
<element signature="e#36#45#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.conf">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="12" column="0" selection-start="167" selection-end="167" vertical-scroll-proportion="0.0" vertical-offset="228" max-vertical-offset="437">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/logView.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="35" column="46" selection-start="1299" selection-end="1299" vertical-scroll-proportion="0.0" vertical-offset="329" max-vertical-offset="1235" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/base.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="5" column="31" selection-start="106" selection-end="106" vertical-scroll-proportion="0.0" vertical-offset="2280" max-vertical-offset="2964" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/perms.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="16" column="32" selection-start="664" selection-end="664" vertical-scroll-proportion="0.0" vertical-offset="304" max-vertical-offset="760" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/base.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="135" column="11" selection-start="6455" selection-end="6455" vertical-scroll-proportion="0.0" vertical-offset="2219" max-vertical-offset="2850" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/info.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="31" column="30" selection-start="957" selection-end="957" vertical-scroll-proportion="0.0" vertical-offset="414" max-vertical-offset="1140" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/addUser.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="21" column="23" selection-start="689" selection-end="689" vertical-scroll-proportion="0.0" vertical-offset="171" max-vertical-offset="1862" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/UserManage/forms.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="19" column="28" selection-start="791" selection-end="791" vertical-scroll-proportion="0.0" vertical-offset="57" max-vertical-offset="931" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/UserManage/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="15" column="38" selection-start="432" selection-end="432" vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="589" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/Assets/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="14" column="0" selection-start="396" selection-end="396" vertical-scroll-proportion="0.0" vertical-offset="266" max-vertical-offset="437" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="22" column="38" selection-start="641" selection-end="641" vertical-scroll-proportion="0.0" vertical-offset="418" max-vertical-offset="2432" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="23" column="33" selection-start="747" selection-end="747" vertical-scroll-proportion="0.0" vertical-offset="437" max-vertical-offset="589">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.conf">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="14" column="22" selection-start="259" selection-end="259" vertical-scroll-proportion="0.0" vertical-offset="266" max-vertical-offset="513" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="9" column="33" selection-start="265" selection-end="265" vertical-scroll-proportion="0.0" vertical-offset="171" max-vertical-offset="855" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="22" column="38" selection-start="641" selection-end="641" vertical-scroll-proportion="0.0" vertical-offset="1473" max-vertical-offset="2432" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="23" column="33" selection-start="747" selection-end="747" vertical-scroll-proportion="0.0" vertical-offset="437" max-vertical-offset="589">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="25" column="5" selection-start="890" selection-end="890" vertical-scroll-proportion="-14.428572" vertical-offset="71" max-vertical-offset="836" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/login.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="10" column="0" selection-start="357" selection-end="432" vertical-scroll-proportion="-6.785714" vertical-offset="0" max-vertical-offset="1425" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/error.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="106" column="0" selection-start="2131" selection-end="2131" vertical-scroll-proportion="0.93153155" vertical-offset="1497" max-vertical-offset="2318" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showAssets.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="-0.23243243" vertical-offset="129" max-vertical-offset="741" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/context_processors.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="6" column="40" selection-start="159" selection-end="164" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="228" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showGroup.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="23" column="46" selection-start="848" selection-end="848" vertical-scroll-proportion="0.0" vertical-offset="85" max-vertical-offset="703" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/chgGroup.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="18" column="55" selection-start="623" selection-end="623" vertical-scroll-proportion="0.0" vertical-offset="342" max-vertical-offset="874" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/chgPass.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="12" column="29" selection-start="431" selection-end="431" vertical-scroll-proportion="0.0" vertical-offset="228" max-vertical-offset="1026" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/chgUser.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="57" column="36" selection-start="2610" selection-end="2615" vertical-scroll-proportion="1.4378378" vertical-offset="285" max-vertical-offset="1539" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/UserManage/forms.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="13" column="28" selection-start="316" selection-end="316" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="950" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/addGroup.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="45" vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="665" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/chgKey.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="4" column="35" selection-start="126" selection-end="173" vertical-scroll-proportion="-2.7142856" vertical-offset="0" max-vertical-offset="1026" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/info.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="32" column="0" selection-start="980" selection-end="980" vertical-scroll-proportion="0.0" vertical-offset="608" max-vertical-offset="1140" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/perms.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="16" column="32" selection-start="664" selection-end="664" vertical-scroll-proportion="0.0" vertical-offset="304" max-vertical-offset="760" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/chgSudo.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="32" column="16" selection-start="1608" selection-end="1608" vertical-scroll-proportion="0.0" vertical-offset="570" max-vertical-offset="1311" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/Assets/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="583" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/downFile.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="27" column="18" selection-start="1290" selection-end="1290" vertical-scroll-proportion="0.0" vertical-offset="105" max-vertical-offset="798">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/Assets/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="2" column="0" selection-start="64" selection-end="64" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="418" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/templatetags/mytags.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="11" column="17" selection-start="256" selection-end="256" vertical-scroll-proportion="0.32590052" vertical-offset="0" max-vertical-offset="583" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/base.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="2" column="6" selection-start="29" selection-end="29" vertical-scroll-proportion="0.0" vertical-offset="2223" max-vertical-offset="2926" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/addAssets.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="41" column="52" selection-start="1892" selection-end="1892" vertical-scroll-proportion="-11.678572" vertical-offset="452" max-vertical-offset="1007" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="35" column="43" selection-start="1202" selection-end="1202" vertical-scroll-proportion="0.0" vertical-offset="177" max-vertical-offset="760">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="56" column="48" selection-start="1521" selection-end="1521" vertical-scroll-proportion="0.0" vertical-offset="723" max-vertical-offset="2432">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showUser.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="31" column="40" selection-start="1091" selection-end="1091" vertical-scroll-proportion="0.0" vertical-offset="386" max-vertical-offset="1083">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/showSudo.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="13" column="32" selection-start="437" selection-end="437" vertical-scroll-proportion="0.0" vertical-offset="247" max-vertical-offset="456">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/addUser.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="76" column="18" selection-start="3126" selection-end="3126" vertical-scroll-proportion="-8.964286" vertical-offset="1193" max-vertical-offset="1976" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/log_handler.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="82" column="17" selection-start="2150" selection-end="2150" vertical-scroll-proportion="0.0" vertical-offset="1336" max-vertical-offset="1900">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/UserManage/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="28" column="4" selection-start="848" selection-end="855" vertical-scroll-proportion="0.0" vertical-offset="405" max-vertical-offset="1026">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/upFile.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="45" vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="912">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/templates/logView.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="15" column="29" selection-start="435" selection-end="435" vertical-scroll-proportion="0.5135135" vertical-offset="0" max-vertical-offset="1368" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.conf">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="17" column="33" selection-start="359" selection-end="359" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="437">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/webroot/AutoSa/AutoSa/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="38" column="0" selection-start="1129" selection-end="1129" vertical-scroll-proportion="0.0" vertical-offset="418" max-vertical-offset="19817">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/jumpserver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="111" column="39" selection-start="3028" selection-end="3028" vertical-scroll-proportion="-5.6809607" vertical-offset="5421" max-vertical-offset="6004">
|
||||
<folding>
|
||||
<element signature="e#36#45#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
|
@ -18,9 +18,7 @@ import paramiko
|
||||
import pxssh
|
||||
import pexpect
|
||||
|
||||
cur_dir = os.path.dirname(__file__)
|
||||
if not cur_dir:
|
||||
cur_dir = "./"
|
||||
cur_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
sys.path.append('%s/webroot/AutoSa/' % cur_dir)
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'AutoSa.settings'
|
||||
|
||||
|
@ -1,14 +1,8 @@
|
||||
pexpect==3.3
|
||||
django-socketio==0.3.9
|
||||
gevent-socketio==0.2.1
|
||||
sphinx-me==0.3
|
||||
django==1.7.1
|
||||
gevent-websocket==0.9.3
|
||||
gevent==1.0.1
|
||||
greenlet==0.4.5
|
||||
python-ldap==2.4.18
|
||||
paramiko==1.15.1
|
||||
pycrypto==2.6.1
|
||||
ecdsa>=0.11
|
||||
MySQL-python==1.2.5
|
||||
python-ldap==2.4.18
|
||||
|
@ -2,11 +2,18 @@ from django.db import models
|
||||
from UserManage.models import User
|
||||
|
||||
|
||||
class IDC(models.Model):
|
||||
name = models.CharField(max_length=20)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Assets(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
ip = models.CharField(max_length=20)
|
||||
port = models.IntegerField(max_length=5)
|
||||
idc = models.CharField(max_length=50)
|
||||
idc = models.ForeignKey(IDC)
|
||||
comment = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
def __unicode__(self):
|
||||
@ -15,4 +22,6 @@ class Assets(models.Model):
|
||||
|
||||
class AssetsUser(models.Model):
|
||||
uid = models.ForeignKey(User)
|
||||
aid = models.ForeignKey(Assets)
|
||||
aid = models.ForeignKey(Assets)
|
||||
|
||||
|
||||
|
@ -20,6 +20,9 @@ urlpatterns = patterns('',
|
||||
(r'^showGroup/$', views.showGroup),
|
||||
(r'^addGroup/$', views.addGroup),
|
||||
(r'^chgGroup/$', views.chgGroup),
|
||||
(r'^showIDC/$', views.showIDC),
|
||||
(r'^addIDC/$', views.addIDC),
|
||||
(r'^chgIDC/$', views.chgIDC),
|
||||
(r'^showSudo/$', views.showSudo),
|
||||
(r'^chgSudo/$', views.chgSudo),
|
||||
(r'^showAssets/$', views.showAssets),
|
||||
|
@ -5,7 +5,7 @@ from django.template import RequestContext
|
||||
from django.shortcuts import render_to_response
|
||||
from django.http import HttpResponseRedirect
|
||||
from UserManage.models import User, Group, Logs, Pid
|
||||
from Assets.models import Assets, AssetsUser
|
||||
from Assets.models import Assets, AssetsUser, IDC
|
||||
import subprocess
|
||||
from Crypto.Cipher import AES
|
||||
from binascii import b2a_hex, a2b_hex
|
||||
@ -290,7 +290,11 @@ def downKey(request):
|
||||
username = request.GET.get('username')
|
||||
|
||||
filename = '%s/%s' % (rsa_dir, username)
|
||||
f = open(filename)
|
||||
try:
|
||||
f = open(filename)
|
||||
except IOError:
|
||||
error = u'密钥文件不存在'
|
||||
return render_to_response('info.html', {'error': error})
|
||||
data = f.read()
|
||||
f.close()
|
||||
response = HttpResponse(data, content_type='application/octet-stream')
|
||||
@ -320,9 +324,21 @@ def showUser(request):
|
||||
error = ''
|
||||
|
||||
if is_super_user(request):
|
||||
users = User.objects.all()
|
||||
users_all = User.objects.all()
|
||||
else:
|
||||
users = group_member(request.session.get('username'))
|
||||
users_all = group_member(request.session.get('username'))
|
||||
|
||||
paginator = Paginator(users_all, 20)
|
||||
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
try:
|
||||
users = paginator.page(page)
|
||||
except (EmptyPage, InvalidPage):
|
||||
users = paginator.page(paginator.num_pages)
|
||||
|
||||
if request.method == 'POST':
|
||||
selected_user = request.REQUEST.getlist('selected')
|
||||
@ -376,7 +392,9 @@ def addUser(request):
|
||||
|
||||
if request.method == 'POST':
|
||||
form = UserAddForm(request.POST)
|
||||
if form.is_valid():
|
||||
if not form.is_valid():
|
||||
return HttpResponse('error')
|
||||
else:
|
||||
user = form.cleaned_data
|
||||
username = user['username']
|
||||
password = user['password']
|
||||
@ -584,13 +602,18 @@ def chgGroup(request):
|
||||
error = ''
|
||||
msg = ''
|
||||
if request.method == 'GET':
|
||||
group_id = request.GET.get('id')
|
||||
group = Group.objects.get(id=group_id)
|
||||
group_id = request.GET.get('id', None)
|
||||
if group_id:
|
||||
group = Group.objects.get(id=group_id)
|
||||
else:
|
||||
return HttpResponseRedirect('/showGroup/')
|
||||
else:
|
||||
group_id = request.POST.get('id')
|
||||
group_name = request.POST.get('name')
|
||||
|
||||
if not group_name:
|
||||
error = u'不能为空'
|
||||
return render_to_response('info.html', {'error': error})
|
||||
else:
|
||||
group = Group.objects.get(id=group_id)
|
||||
group.name = group_name
|
||||
@ -601,6 +624,67 @@ def chgGroup(request):
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@superuser_required
|
||||
def showIDC(request):
|
||||
error = ''
|
||||
msg = ''
|
||||
idcs = IDC.objects.all()
|
||||
|
||||
if request.method == 'POST':
|
||||
selected_idc = request.REQUEST.getlist('selected')
|
||||
if selected_idc:
|
||||
for idc_id in selected_idc:
|
||||
idc = IDC.objects.get(id=idc_id)
|
||||
idc.delete()
|
||||
msg = '删除成功'
|
||||
|
||||
return render_to_response('showIDC.html',
|
||||
{'idcs': idcs, 'error': error, 'msg': msg, 'asset_menu': 'active'},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@superuser_required
|
||||
def chgIDC(request):
|
||||
error = ''
|
||||
msg = ''
|
||||
if request.method == 'GET':
|
||||
idc_id = request.GET.get('id', None)
|
||||
if not idc_id:
|
||||
return HttpResponseRedirect('/showIDC/')
|
||||
else:
|
||||
idc = IDC.objects.get(id=idc_id)
|
||||
else:
|
||||
idc_id = request.POST.get('id')
|
||||
idc_name = request.POST.get('name')
|
||||
if not idc_name:
|
||||
error = u'不能为空'
|
||||
return render_to_response('info.html', {'error': error})
|
||||
else:
|
||||
idc = Group.objects.get(id=idc_id)
|
||||
idc.name = idc_name
|
||||
idc.save()
|
||||
msg = u'修改成功'
|
||||
|
||||
return render_to_response('chgGroup.html', {'idc': idc, 'error': error, 'msg': msg, 'asset_menu': 'active'},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@superuser_required
|
||||
def addIDC(request):
|
||||
error = ''
|
||||
msg = ''
|
||||
if request.method == 'POST':
|
||||
idc_name = request.POST.get('name')
|
||||
if idc_name:
|
||||
idc = IDC(name=idc_name)
|
||||
idc.save()
|
||||
msg = u'%s IDC添加成功' % idc_name
|
||||
else:
|
||||
error = u'不能为空'
|
||||
return render_to_response('addIDC.html',
|
||||
{'error': error, 'msg': msg, 'user_menu': 'active'},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@admin_required
|
||||
def showSudo(request):
|
||||
if request.method == 'GET':
|
||||
@ -680,13 +764,25 @@ def showAssets(request):
|
||||
"""查看服务器"""
|
||||
info = ''
|
||||
if request.session.get('admin') < 2:
|
||||
assets = []
|
||||
assets_all = []
|
||||
username = request.session.get('username')
|
||||
user = User.objects.get(username=username)
|
||||
for asset in user.assetsuser_set.all().order_by('ip'):
|
||||
assets.append(asset.aid)
|
||||
assets_all.append(asset.aid)
|
||||
else:
|
||||
assets = Assets.objects.all().order_by('ip')
|
||||
assets_all = Assets.objects.all().order_by('ip')
|
||||
paginator = Paginator(assets_all, 20)
|
||||
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
try:
|
||||
assets = paginator.page(page)
|
||||
except (EmptyPage, InvalidPage):
|
||||
assets = paginator.page(paginator.num_pages)
|
||||
|
||||
if request.method == 'POST':
|
||||
if request.session.get('admin') < 2:
|
||||
return HttpResponseRedirect('/showAssets/')
|
||||
@ -704,12 +800,15 @@ def addAssets(request):
|
||||
"""添加服务器"""
|
||||
error = ''
|
||||
msg = ''
|
||||
idcs = IDC.objects.all()
|
||||
if request.method == 'POST':
|
||||
ip = request.POST.get('ip')
|
||||
port = request.POST.get('port')
|
||||
idc = request.POST.get('idc')
|
||||
comment = request.POST.get('comment')
|
||||
|
||||
idc = IDC.objects.get(id=idc)
|
||||
|
||||
if '' in (ip, port):
|
||||
error = '带*号内容不能为空。'
|
||||
elif Assets.objects.filter(ip=ip):
|
||||
@ -719,7 +818,7 @@ def addAssets(request):
|
||||
asset.save()
|
||||
msg = u'%s 添加成功' % ip
|
||||
|
||||
return render_to_response('addAssets.html', {'msg': msg, 'error': error, 'asset_menu': 'active'},
|
||||
return render_to_response('addAssets.html', {'msg': msg, 'error': error, 'idcs': idcs, 'asset_menu': 'active'},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@ -727,9 +826,21 @@ def addAssets(request):
|
||||
def showPerm(request):
|
||||
"""查看权限"""
|
||||
if is_super_user(request):
|
||||
users = User.objects.all()
|
||||
users_all = User.objects.all()
|
||||
else:
|
||||
users = group_member(request.session.get('username'))
|
||||
users_all = group_member(request.session.get('username'))
|
||||
|
||||
paginator = Paginator(users_all, 20)
|
||||
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
except ValueError:
|
||||
page = 1
|
||||
|
||||
try:
|
||||
users = paginator.page(page)
|
||||
except (EmptyPage, InvalidPage):
|
||||
users = paginator.page(paginator.num_pages)
|
||||
|
||||
if request.method == 'POST':
|
||||
assets_del = request.REQUEST.getlist('selected')
|
||||
@ -737,7 +848,7 @@ def showPerm(request):
|
||||
user = User.objects.get(username=username)
|
||||
|
||||
for asset_id in assets_del:
|
||||
asset = Assets.objects.get(id=asset_id)
|
||||
asset = Assets.objects.get(id=int(asset_id))
|
||||
asset_user_del = AssetsUser.objects.get(uid=user, aid=asset)
|
||||
asset_user_del.delete()
|
||||
return HttpResponseRedirect('/showPerm/?username=%s' % username)
|
||||
@ -820,7 +931,7 @@ def chgPass(request):
|
||||
|
||||
if not is_admin_role(request):
|
||||
oldpass = request.POST.get('oldpass')
|
||||
if oldpass != user.password:
|
||||
if md5_crypt(oldpass) != user.password:
|
||||
error = '原来密码不正确'
|
||||
|
||||
if password != password_again:
|
||||
@ -829,7 +940,7 @@ def chgPass(request):
|
||||
if error:
|
||||
return render_to_response('info.html', {'error': error})
|
||||
|
||||
user.password = password
|
||||
user.password = md5_crypt(password)
|
||||
user.save()
|
||||
|
||||
return render_to_response('info.html', {'msg': '修改密码成功'})
|
||||
@ -857,10 +968,11 @@ def chgKey(request):
|
||||
user = User.objects.get(username=username)
|
||||
password = request.POST.get('password')
|
||||
password_again = request.POST.get('password_again')
|
||||
jm = PyCrypt(key)
|
||||
|
||||
if not is_admin_role(request):
|
||||
oldpass = request.POST.get('oldpass')
|
||||
if oldpass != user.key_pass:
|
||||
if jm.encrypt(oldpass) != user.key_pass:
|
||||
error = '原来密码不正确'
|
||||
|
||||
if password != password_again:
|
||||
@ -873,12 +985,11 @@ def chgKey(request):
|
||||
return render_to_response('info.html', {'error': error})
|
||||
|
||||
keyfile = '%s/%s' % (rsa_dir, username)
|
||||
jm = PyCrypt(key)
|
||||
ret = bash('ssh-keygen -p -P %s -N %s -f %s' % (jm.decrypt(user.key_pass), password, keyfile))
|
||||
if ret != 0:
|
||||
error = '更改私钥密码错误'
|
||||
return render_to_response('info.html', {'error': error})
|
||||
user.key_pass = password
|
||||
user.key_pass = jm.encrypt(password)
|
||||
user.save()
|
||||
|
||||
return render_to_response('info.html', {'msg': '修改密码成功'})
|
||||
@ -962,7 +1073,7 @@ def downFile(request):
|
||||
(time.strftime('%Y/%m/%d %H:%M:%S'), username, host, path))
|
||||
f.close()
|
||||
wrapper = FileWrapper(open(download_file))
|
||||
response = HttpResponse(wrapper, mimetype='application/octet-stream')
|
||||
response = HttpResponse(wrapper, content_type='application/octet-stream')
|
||||
response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(path)
|
||||
return response
|
||||
|
||||
@ -975,7 +1086,7 @@ def downFile(request):
|
||||
def logView(request):
|
||||
thirtyDayAgo = (datetime.datetime.now() - datetime.timedelta(30))
|
||||
thirtyDayAgoStamp = int(time.mktime(thirtyDayAgo.timetuple()))
|
||||
logs_all = Logs.objects.filter(start_time__gt=thirtyDayAgoStamp)
|
||||
logs_all = Logs.objects.filter(start_time__gt=thirtyDayAgoStamp).order_by("-id")
|
||||
paginator = Paginator(logs_all, 20)
|
||||
|
||||
try:
|
||||
@ -1015,7 +1126,7 @@ def killSession(request):
|
||||
if pid:
|
||||
pid = pid[0]
|
||||
os.kill(pid.cpid, 9)
|
||||
return HttpResponse('ok')
|
||||
return render_to_response('info.html', {'msg': u'结束会话成功,返回中.'})
|
||||
|
||||
|
||||
|
||||
|
@ -39,8 +39,10 @@ class UserAddForm(forms.Form):
|
||||
return password_again
|
||||
|
||||
def clean_key_pass_again(self):
|
||||
key_pass = self.cleaned_data['key_pass']
|
||||
key_pass_again = self.cleaned_data['key_pass_again']
|
||||
key_pass = self.data['key_pass']
|
||||
key_pass_again = self.data['key_pass_again']
|
||||
if key_pass != key_pass_again:
|
||||
raise forms.ValidationError('Key Password input twice not match. ')
|
||||
if len(key_pass) < 6:
|
||||
raise forms.ValidationError('Key Password input twice not match. ')
|
||||
return key_pass_again
|
@ -24,7 +24,7 @@ def log_hanler(logid):
|
||||
ret2 = os.system('cat %s | grep "\[.*@.*\][\$\#]" >> %s.his' % (filename, filename))
|
||||
ret3 = os.system('cat %s | grep "EndTime" >> %s.his' % (filename, filename))
|
||||
if (ret1 + ret2 + ret3) == 0:
|
||||
print 'Handler % ok.' % filename
|
||||
print 'Handler %s ok.' % filename
|
||||
|
||||
|
||||
def set_finish(id):
|
||||
|
@ -1,3 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
./manage.py runserver 0.0.0.0:80
|
||||
./manage.py runserver 0.0.0.0:80 &> access.log &
|
||||
./log_handler.py &> handler.log &
|
||||
|
@ -27,19 +27,39 @@ $.fn.webSocket = function(opt){
|
||||
return new Date().getTime()+""+Math.floor(Math.random()*899+100);
|
||||
};
|
||||
|
||||
var init = function(){
|
||||
message.id = genUid();
|
||||
message.filename = $this.attr('filename');
|
||||
var init = function(e){
|
||||
|
||||
var socket = io.connect('ws://172.10.10.9:3000');
|
||||
//告诉服务器端有用户登录
|
||||
socket.emit('login', {userid:message.id, filename:message.filename});
|
||||
socket.on('message',function(obj){
|
||||
window.console.log(obj.content);
|
||||
});
|
||||
var node = $(e.target);
|
||||
message.id = genUid();
|
||||
message.filename = node.attr('filename');
|
||||
BootstrapDialog.show({message:function(){
|
||||
var escapeString = function (html){
|
||||
var elem = document.createElement('div')
|
||||
var txt = document.createTextNode(html)
|
||||
elem.appendChild(txt)
|
||||
return elem.innerHTML;
|
||||
}
|
||||
var tag = $('<div id="log" style="height:300px;overflow: auto;"></div>');
|
||||
//告诉服务器端有用户登录
|
||||
socket.emit('login', {userid:message.id, filename:message.filename});
|
||||
socket.on('message',function(obj){
|
||||
//去除log中的颜色控制字符
|
||||
var regx = /\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/g;
|
||||
tag.append('<p>'+escapeString(obj.content.replace(regx,''))+'</p>');
|
||||
});
|
||||
return tag[0];
|
||||
} ,
|
||||
title:'日志',
|
||||
onhide:function(){
|
||||
socket.emit('disconnect');
|
||||
}});
|
||||
}
|
||||
$this.on("click",function(){
|
||||
init();
|
||||
|
||||
|
||||
$this.on("click",function(e){
|
||||
init(e);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -28,8 +28,17 @@
|
||||
<div class="form-group">
|
||||
<label for="idc" class="col-sm-2 control-label">IDC<span style="color: red"> *</span></label>
|
||||
<div class="col-sm-4">
|
||||
<input type="text" class="form-control" id="idc" name="idc" placeholder="IDC">
|
||||
<select name="idc" id="idc" class="form-control">
|
||||
{% for idc in idcs %}
|
||||
<option value="{{ idc.id }}">{{ idc.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<a href="/addIDC/">添加IDC</a>
|
||||
<a href="/showIDC/">删除IDC</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment" class="col-sm-2 control-label">备注<span style="color: red"></span></label>
|
||||
|
31
webroot/AutoSa/templates/addIDC.html
Normal file
31
webroot/AutoSa/templates/addIDC.html
Normal file
@ -0,0 +1,31 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<form class="form-horizontal" role="form" method="post" action="" >
|
||||
<fieldset >
|
||||
<legend>添加IDC</legend>
|
||||
{% if error %}
|
||||
<div class="alert alert-danger">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success">
|
||||
{{ msg }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group">
|
||||
<label for="name" class="col-sm-2 control-label">IDC<span style="color: red"> *</span></label>
|
||||
<div class="col-sm-4">
|
||||
<input type="text" class="form-control" id="name" name="name" placeholder="IDC">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-4">
|
||||
<button class="btn btn-primary">添加</button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endblock %}
|
@ -26,7 +26,7 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<button class="btn btn-primary">删除</button></td>
|
||||
<button class="btn btn-success">删除</button></td>
|
||||
</form>
|
||||
|
||||
{% endblock %} %}
|
@ -2,8 +2,8 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>运维管理系统</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="http://img.youlu.com/web/favicon.gif" />
|
||||
<title>Jumpserver</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5js"></script>
|
||||
@ -12,19 +12,20 @@
|
||||
<link href="/static/css/bootstrap-dialog.css" rel="stylesheet">
|
||||
<link href="/static/css/main.css" rel="stylesheet">
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
|
||||
<script src="/static/js/jquery.min.js"></script>
|
||||
|
||||
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
|
||||
<script src="/static/js/bootstrap.min.js"></script>
|
||||
<script src="/static/js/bootstrap-dialog.js"></script>
|
||||
<script src="http://172.10.10.9:3000/socket.io/socket.io.js"></script>
|
||||
<script src="/static/js/main.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% if not admin %}
|
||||
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
|
||||
<div class="navbar-header"> <a class="navbar-brand" href="#">运维管理系统</a> </div>
|
||||
<div class="navbar-header"> <a class="navbar-brand" href="#">Jumpserver</a> </div>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="{{ index }}"><a href="/">主页</a></li>
|
||||
@ -73,7 +74,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
|
||||
<div class="navbar-header"> <a class="navbar-brand" href="#">运维管理系统</a> </div>
|
||||
<div class="navbar-header"> <a class="navbar-brand" href="#">Jumpserver</a> </div>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="{{ index }}"><a href="/">主页</a></li>
|
||||
|
@ -2,7 +2,7 @@
|
||||
{% block content %}
|
||||
<form class="form-horizontal" role="form" method="post" action="/chgGroup/" >
|
||||
<fieldset >
|
||||
<legend>修改用户信息</legend>
|
||||
<legend>修改属组信息</legend>
|
||||
{% if error %}
|
||||
<div class="alert alert-danger">
|
||||
{{ error }}
|
||||
|
41
webroot/AutoSa/templates/chgIDC.html
Normal file
41
webroot/AutoSa/templates/chgIDC.html
Normal file
@ -0,0 +1,41 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<form class="form-horizontal" role="form" method="post" action="/chgGroup/" >
|
||||
<fieldset >
|
||||
<legend>修改IDC信息</legend>
|
||||
{% if error %}
|
||||
<div class="alert alert-danger">
|
||||
{{ error }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if msg %}
|
||||
<div class="alert alert-success">
|
||||
{{ msg }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group">
|
||||
<div class="col-sm-4">
|
||||
<input type="text" id="id" name="id" value="{{ idc.id }}" hidden="hidden">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="oldname" class="col-sm-2 control-label">原来IDC<span style="color: red"> *</span></label>
|
||||
<div class="col-sm-4">
|
||||
<input type="text" id="oldname" name="oldname" class="form-control" value="{{ idc.name }}" readOnly="readOnly">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name" class="col-sm-2 control-label">IDC<span style="color: red"> *</span></label>
|
||||
<div class="col-sm-4">
|
||||
<input type="text" id="name" name="name" class="form-control" placeholder="IDC">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-4">
|
||||
<button class="btn btn-primary">修改</button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endblock %}
|
@ -28,7 +28,7 @@
|
||||
<td><a href="/logHistory/?id={{ log.id }}" class="log_command">统计</a></td>
|
||||
<td>阻断</td>
|
||||
{% else %}
|
||||
<td><span class='monitor' filename="{{ log.logfile }}">监控</span></td>
|
||||
<td><a class='monitor' filename="{{ log.logfile }}">监控</a></td>
|
||||
<td>命令统计</td>
|
||||
<td><a href="/killSession/?id={{ log.id }}">阻断</a> </td>
|
||||
{% endif %}
|
||||
@ -46,6 +46,7 @@
|
||||
}});
|
||||
return false;
|
||||
})
|
||||
$(".monitor").webSocket()
|
||||
</script>
|
||||
<!--<button class="btn btn-primary">删除</button>-->
|
||||
</form>
|
||||
|
@ -33,4 +33,19 @@
|
||||
</table>
|
||||
<button class="btn btn-primary">删除</button></td>
|
||||
</form>
|
||||
<nav>
|
||||
<ul class="pager">
|
||||
{% if assets.has_previous %}
|
||||
<li><a href="?page={{ assets.previous_page_number }}">上一页</a></li>
|
||||
{% endif %}
|
||||
|
||||
<span class="current">
|
||||
Page {{ assets.number }} of {{ assets.paginator.num_pages }}.
|
||||
</span>
|
||||
|
||||
{% if assets.has_next %}
|
||||
<li><a href="?page={{ assets.next_page_number }}">下一页</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
31
webroot/AutoSa/templates/showIDC.html
Normal file
31
webroot/AutoSa/templates/showIDC.html
Normal file
@ -0,0 +1,31 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block content %}
|
||||
<form method="post" action="">
|
||||
{% if info %}
|
||||
<p class="alert alert-success">
|
||||
{{ info }}
|
||||
</p>
|
||||
{% endif %}
|
||||
<table class="table table-striped table-hover table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input onclick="selectAll()" type="checkbox" name="select_all" style="select_all" id="select_all"/></th>
|
||||
<th>ID</th>
|
||||
<th>IDC</th>
|
||||
<th>修改</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for idc in idcs %}
|
||||
<tr>
|
||||
<td><input type="checkbox" name="selected" value="{{ idc.id }}"></td>
|
||||
<td>{{ idc.id }}</td>
|
||||
<td>{{ idc.name }}</td>
|
||||
<td><a href="/chgIDC/?id={{ idc.id }}">修改</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<button class="btn btn-primary">删除</button>
|
||||
</form>
|
||||
{% endblock %}
|
0
webroot/AutoSa/test/abc
Normal file
0
webroot/AutoSa/test/abc
Normal file
92
webroot/AutoSa/websocket/index.js
Normal file
92
webroot/AutoSa/websocket/index.js
Normal file
@ -0,0 +1,92 @@
|
||||
var app = require('express')();
|
||||
var http = require('http').Server(app);
|
||||
var io = require('socket.io')(http);
|
||||
var spawn = require('child_process').spawn;
|
||||
|
||||
|
||||
|
||||
var Tail = require('tail').Tail;
|
||||
|
||||
|
||||
app.get('/', function(req, res){
|
||||
res.send('<h1>Welcome Realtime Server</h1>');
|
||||
});
|
||||
|
||||
//在线用户
|
||||
var onlineUsers = {};
|
||||
//当前在线人数
|
||||
var onlineCount = 0;
|
||||
|
||||
io.on('connection', function(socket){
|
||||
console.log('a user connected');
|
||||
|
||||
//监听新用户加入
|
||||
socket.on('login', function(obj){
|
||||
//将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
|
||||
socket.name = obj.userid;
|
||||
socket.fileName = obj.filename;
|
||||
var tail = new Tail(obj.filename);
|
||||
console.log(obj.filename);
|
||||
tail.on('line',function(data) {
|
||||
console.log(data);
|
||||
var newData = {userid:obj.userid,username:obj.username,content:data};
|
||||
socket.emit('message',newData);
|
||||
});
|
||||
// var tail = spawn("tail", ['-f', obj.filename]);
|
||||
// tail.stdout.on('data',function(data){
|
||||
// var content = data.toString();
|
||||
// console.log(content);
|
||||
// var newData = {userid:obj.userid,username:obj.username,content:content};
|
||||
// socket.emit('message',newData);
|
||||
// });
|
||||
|
||||
|
||||
socket.tail = tail;
|
||||
|
||||
//检查在线列表,如果不在里面就加入
|
||||
if(!onlineUsers.hasOwnProperty(obj.userid)) {
|
||||
onlineUsers[obj.userid] = obj.username;
|
||||
//在线人数+1
|
||||
onlineCount++;
|
||||
}
|
||||
|
||||
//向所有客户端广播用户加入
|
||||
io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
|
||||
console.log(obj.username+'加入了聊天室');
|
||||
});
|
||||
|
||||
//监听用户退出
|
||||
socket.on('disconnect', function(){
|
||||
//将退出的用户从在线列表中删除
|
||||
if(onlineUsers.hasOwnProperty(socket.name)) {
|
||||
//退出用户的信息
|
||||
var obj = {userid:socket.name, username:onlineUsers[socket.name]};
|
||||
|
||||
if( socket.tail){
|
||||
socket.tail.unwatch();
|
||||
}
|
||||
|
||||
//删除
|
||||
delete onlineUsers[socket.name];
|
||||
//在线人数-1
|
||||
onlineCount--;
|
||||
|
||||
//向所有客户端广播用户退出
|
||||
io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
|
||||
console.log(obj.username+'退出了聊天室');
|
||||
}
|
||||
});
|
||||
|
||||
//监听用户发布聊天内容
|
||||
socket.on('message', function(obj){
|
||||
//向所有客户端广播发布的消息
|
||||
io.emit('message', obj);
|
||||
socket.emit('message',obj);
|
||||
console.log(obj.username+'说:'+obj.content);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
http.listen(3000, function(){
|
||||
console.log('listening on *:3000');
|
||||
});
|
11
webroot/AutoSa/websocket/package.json
Normal file
11
webroot/AutoSa/websocket/package.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "web-socket",
|
||||
"version": "0.0.1",
|
||||
"description": "my first realtime server",
|
||||
"dependencies": {
|
||||
"express": "~4.10.1",
|
||||
"socket.io": "~1.2.0",
|
||||
"node-tail": "0.0.4",
|
||||
"tail": "~0.4.0"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user