Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
feature: allow users to manage ssh keys
  • Loading branch information
usmannasir committed Oct 25, 2020
1 parent b815d10 commit a749f71
Show file tree
Hide file tree
Showing 120 changed files with 18,209 additions and 5,102 deletions.
1 change: 0 additions & 1 deletion firewall/static/firewall/firewall.js
Expand Up @@ -721,7 +721,6 @@ app.controller('secureSSHCTRL', function ($scope, $http) {

}


$scope.saveKey = function (key) {

$scope.secureSSHLoading = false;
Expand Down
218 changes: 109 additions & 109 deletions firewall/templates/firewall/secureSSH.html
Expand Up @@ -3,18 +3,21 @@
{% block title %}{% trans "Secure SSH - CyberPanel" %}{% endblock %}
{% block content %}

{% load static %}
{% get_current_language as LANGUAGE_CODE %}
<!-- Current language: {{ LANGUAGE_CODE }} -->


<div class="container">
<div id="page-title">
<h2>{% trans "Secure SSH" %} - <a target="_blank" href="http://go.cyberpanel.net/ssh-docs" style="height: 23px;line-height: 21px;" class="btn btn-border btn-alt border-red btn-link font-red" title=""><span>{% trans "SSH Docs" %}</span></a></h2>
<p>{% trans "Secure or harden SSH Configurations." %}</p>
</div>
{% load static %}
{% get_current_language as LANGUAGE_CODE %}
<!-- Current language: {{ LANGUAGE_CODE }} -->


<div class="container">
<div id="page-title">
<h2>{% trans "Secure SSH" %} - <a target="_blank" href="http://go.cyberpanel.net/ssh-docs"
style="height: 23px;line-height: 21px;"
class="btn btn-border btn-alt border-red btn-link font-red"
title=""><span>{% trans "SSH Docs" %}</span></a></h2>
<p>{% trans "Secure or harden SSH Configurations." %}</p>
</div>

<div ng-controller="secureSSHCTRL" class="panel">
<div ng-controller="secureSSHCTRL" class="panel">
<div class="panel-body">
<h3 class="content-box-header">
{% trans "Secure SSH" %} <img ng-hide="secureSSHLoading" src="{% static 'images/loading.gif' %}">
Expand All @@ -37,159 +40,156 @@ <h3 class="content-box-header">
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="tab-example-1">
<div class="example-box-wrapper">
<div class="example-box-wrapper">


<form action="/" class="form-horizontal bordered-row">
<form action="/" class="form-horizontal bordered-row">


<div ng-hide="emailDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "SSH Port" %}</label>
<div class="col-sm-6">
<input type="text" class="form-control" ng-model="sshPort" required>
</div>
<div ng-hide="emailDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "SSH Port" %}</label>
<div class="col-sm-6">
<input type="text" class="form-control" ng-model="sshPort" required>
</div>

</div>
</div>


<div class="form-group">
<label class="col-sm-3 control-label">{% trans "Permit Root Login" %}</label>
<div class="col-md-8 text-white">
<input type="checkbox" id="rootLogin" data-toggle="toggle" data-on="Enabled">
<div style="margin-top: 2%;margin-bottom: -2%" class="alert alert-warning">
<p>{% trans "Before disabling root login, make sure you have another account with sudo priviliges on server." %}</p>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">{% trans "Permit Root Login" %}</label>
<div class="col-md-8 text-white">
<input type="checkbox" id="rootLogin" data-toggle="toggle"
data-on="Enabled">
<div style="margin-top: 2%;margin-bottom: -2%" class="alert alert-warning">
<p>{% trans "Before disabling root login, make sure you have another account with sudo priviliges on server." %}</p>
</div>
</div>
</div>

<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="saveChanges()" class="btn btn-primary btn-lg">{% trans "Save Changes" %}</button>
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="saveChanges()"
class="btn btn-primary btn-lg">{% trans "Save Changes" %}</button>

</div>
</div>
</div>
</div>


<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<div ng-hide="couldNotSave" class="alert alert-danger">
<p>{% trans "Error message: " %}{$ errorMessage $}</p>
</div>
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<div ng-hide="couldNotSave" class="alert alert-danger">
<p>{% trans "Error message: " %}{$ errorMessage $}</p>
</div>

<div ng-hide="detailsSaved" class="alert alert-success">
<p>{% trans "SSH Configurations Saved." %}</p>
</div>


<div ng-hide="couldNotConnect" class="alert alert-danger">
<p>{% trans "Could not connect. Please refresh this page." %}</p>
</div>
</div>
<div ng-hide="detailsSaved" class="alert alert-success">
<p>{% trans "SSH Configurations Saved." %}</p>
</div>



</div>

<div ng-hide="couldNotConnect" class="alert alert-danger">
<p>{% trans "Could not connect. Please refresh this page." %}</p>
</div>
</div>


</form>
</div>


</form>


</div>
</div>
</div>



<div class="tab-pane fade" id="tab-example-3">

<form action="/" class="form-horizontal bordered-row">
<form action="/" class="form-horizontal bordered-row">

<!------ List of records --------------->

<div class="form-group">

<div class="col-sm-12">

<table class="table">
<thead>
<tr>
<th>{% trans "User Name" %}</th>
<th>{% trans "Key" %}</th>
<th>{% trans "Delete" %}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="record in records track by $index">
<td ng-bind="record.userName">root</td>
<td ng-bind="record.key"></td>
<td ng-click="deleteKey(record.key)"><div class="h4 text-danger text-bold">X</div></td>
</tr>
</tbody>
</table>
</div>
</div>

<div class="form-group">

<div class="col-sm-12">

<table class="table">
<thead>
<tr>
<th>{% trans "User Name" %}</th>
<th>{% trans "Key" %}</th>
<th>{% trans "Delete" %}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="record in records track by $index">
<td ng-bind="record.userName">root</td>
<td ng-bind="record.key"></td>
<td ng-click="deleteKey(record.key)">
<div class="h4 text-danger text-bold">X</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>


<!------ List of records --------------->
<!------ List of records --------------->

<div ng-hide="keyBox" class="form-group">
<div class="col-sm-12">
<textarea placeholder="Paste your public key here..." ng-model="keyData" rows="6" class="form-control">{{ logs }}</textarea>
<div ng-hide="keyBox" class="form-group">
<div class="col-sm-12">
<textarea placeholder="Paste your public key here..." ng-model="keyData"
rows="6" class="form-control">{{ logs }}</textarea>
</div>
</div>
</div>


<div ng-hide="showKeyBox" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="addKey()" class="btn btn-primary btn-lg">{% trans "Add Key" %}</button>
<div ng-hide="showKeyBox" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="addKey()"
class="btn btn-primary btn-lg">{% trans "Add Key" %}</button>

</div>
</div>
</div>
</div>

<div ng-hide="saveKeyBtn" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="saveKey()" class="btn btn-primary btn-lg">{% trans "Save" %}</button>
</div>
</div>
<div ng-hide="saveKeyBtn" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<button type="button" ng-click="saveKey()"
class="btn btn-primary btn-lg">{% trans "Save" %}</button>
</div>
</div>

<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">
<div class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-4">

<div ng-hide="keyDeleted" class="alert alert-success">
<div ng-hide="keyDeleted" class="alert alert-success">
<p>{% trans "SSH Key Deleted" %}</p>
</div>
</div>


<div ng-hide="couldNotConnect" class="alert alert-danger">
<div ng-hide="couldNotConnect" class="alert alert-danger">
<p>{% trans "Could not connect. Please refresh this page." %}</p>
</div>
</div>
</div>
</div>
</div>





</form>



</div>
</div>
</div>
</div>
</div>


</div>
</div>


{% endblock %}
35 changes: 24 additions & 11 deletions plogical/firewallUtilities.py
Expand Up @@ -130,18 +130,20 @@ def saveSSHConfigs(type, sshPort, rootLogin):
print("0," + str(msg))

@staticmethod
def addSSHKey(tempPath):
def addSSHKey(tempPath, path=None):
try:
key = open(tempPath, 'r').read()

sshDir = "/root/.ssh"
if path == None:
sshDir = "/root/.ssh"
pathToSSH = "/root/.ssh/authorized_keys"

pathToSSH = "/root/.ssh/authorized_keys"

if os.path.exists(sshDir):
pass
if os.path.exists(sshDir):
pass
else:
os.mkdir(sshDir)
else:
os.mkdir(sshDir)
pathToSSH = path

if os.path.exists(pathToSSH):
pass
Expand Down Expand Up @@ -176,10 +178,14 @@ def addSSHKey(tempPath):
print("0," + str(msg))

@staticmethod
def deleteSSHKey(key):
def deleteSSHKey(key, path=None):
try:
keyPart = key.split(" ")[1]
pathToSSH = "/root/.ssh/authorized_keys"

if path == None:
pathToSSH = "/root/.ssh/authorized_keys"
else:
pathToSSH = path

data = open(pathToSSH, 'r').readlines()

Expand Down Expand Up @@ -212,16 +218,23 @@ def main():
parser.add_argument("--sshPort", help="SSH Port")
parser.add_argument("--rootLogin", help="Root Login")
parser.add_argument("--key", help="Key")
parser.add_argument("--path", help="Path to key file.")


args = parser.parse_args()

if args.function == "saveSSHConfigs":
FirewallUtilities.saveSSHConfigs(args.type, args.sshPort, args.rootLogin)
elif args.function == "addSSHKey":
FirewallUtilities.addSSHKey(args.tempPath)
if not args.path:
FirewallUtilities.addSSHKey(args.tempPath)
else:
FirewallUtilities.addSSHKey(args.tempPath, args.path)
elif args.function == "deleteSSHKey":
FirewallUtilities.deleteSSHKey(args.key)
if not args.path:
FirewallUtilities.deleteSSHKey(args.key)
else:
FirewallUtilities.deleteSSHKey(args.key, args.path)



Expand Down

0 comments on commit a749f71

Please sign in to comment.