mirror of https://github.com/Aidaho12/haproxy-wi
parent
76bbd64161
commit
baf2494732
|
@ -268,6 +268,53 @@ def update_db_v_3_2_8(**kwargs):
|
|||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_3(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = [ "INSERT INTO settings (param, value, section, `desc`) values('ldap_enable', '0', 'ldap', 'If 1 ldap enabled');",
|
||||
"INSERT INTO settings (param, value, section, `desc`) values('ldap_server', '', 'ldap', 'IP address ldap server');",
|
||||
"INSERT INTO settings (param, value, section, `desc`) values('ldap_port', '389', 'ldap', 'Default port is 389 or 636');",
|
||||
"INSERT INTO settings (param, value, section, `desc`) values('ldap_user', '', 'ldap', 'Login for connect to LDAP server. Enter: user@domain.com');",
|
||||
"INSERT INTO settings (param, value, section, `desc`) values('ldap_password', '', 'ldap', 'Password for connect to LDAP server');",
|
||||
"INSERT INTO settings (param, value, section, `desc`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com');"]
|
||||
try:
|
||||
for i in sql:
|
||||
cur.execute(i)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: desc' or e == "1060 (42S21): Duplicate column name 'desc' ":
|
||||
print('Updating... go to version 3.2')
|
||||
else:
|
||||
print("An error occurred:", e)
|
||||
return False
|
||||
else:
|
||||
pass
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
def update_db_v_3_31(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """
|
||||
ALTER TABLE `user` ADD COLUMN ldap_user INTEGER NOT NULL DEFAULT 0;
|
||||
"""
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: ldap_user' or e == " 1060 (42S21): Duplicate column name 'ldap_user' ":
|
||||
print('Updating... go to version 3.3')
|
||||
else:
|
||||
print("An error occurred:", e)
|
||||
return False
|
||||
else:
|
||||
print("DB was update to 3.3<br />")
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
def update_all():
|
||||
update_db_v_31()
|
||||
|
@ -275,6 +322,8 @@ def update_all():
|
|||
update_db_v_3_21()
|
||||
update_db_v_3_2_3()
|
||||
update_db_v_3_2_8()
|
||||
update_db_v_3_3()
|
||||
update_db_v_3_31()
|
||||
|
||||
def update_all_silent():
|
||||
update_db_v_31(silent=1)
|
||||
|
@ -282,8 +331,10 @@ def update_all_silent():
|
|||
update_db_v_3_21(silent=1)
|
||||
update_db_v_3_2_3(silent=1)
|
||||
update_db_v_3_2_8(silent=1)
|
||||
update_db_v_3_3(silent=1)
|
||||
update_db_v_3_31(silent=1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_table()
|
||||
update_all()
|
||||
|
||||
|
92
app/login.py
92
app/login.py
|
@ -25,6 +25,60 @@ db_create = ""
|
|||
error_log = ""
|
||||
error = ""
|
||||
|
||||
def send_cookie(login):
|
||||
session_ttl = int()
|
||||
session_ttl = sql.get_setting('session_ttl')
|
||||
session_ttl = int(session_ttl)
|
||||
expires = datetime.datetime.utcnow() + datetime.timedelta(days=session_ttl)
|
||||
user_uuid = str(uuid.uuid4())
|
||||
user_token = str(uuid.uuid4())
|
||||
|
||||
c = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
c["uuid"] = user_uuid
|
||||
c["uuid"]["path"] = "/app/"
|
||||
c["uuid"]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
print(c)
|
||||
sql.write_user_uuid(login, user_uuid)
|
||||
sql.write_user_token(login, user_token)
|
||||
funct.logging('locahost', sql.get_user_name_by_uuid(user_uuid)+' log in')
|
||||
print("Content-type: text/html\n")
|
||||
print('ok')
|
||||
sys.exit()
|
||||
|
||||
|
||||
def check_in_ldap(user, password):
|
||||
import ldap
|
||||
|
||||
server = sql.get_setting('ldap_server')
|
||||
port = sql.get_setting('ldap_port')
|
||||
|
||||
l = ldap.initialize("ldap://"+server+':'+port)
|
||||
try:
|
||||
l.protocol_version = ldap.VERSION3
|
||||
l.set_option(ldap.OPT_REFERRALS, 0)
|
||||
|
||||
bind = l.simple_bind_s(user, password)
|
||||
except ldap.INVALID_CREDENTIALS:
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Invalid credentials</div><br /><br />')
|
||||
sys.exit()
|
||||
except ldap.SERVER_DOWN:
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Server down')
|
||||
sys.exit()
|
||||
except ldap.LDAPError as e:
|
||||
if type(e.message) == dict and e.message.has_key('desc'):
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Other LDAP error: %s</div><br /><br />' % e.message['desc'])
|
||||
sys.exit()
|
||||
else:
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Other LDAP error: %s</div><br /><br />' % e)
|
||||
sys.exit()
|
||||
|
||||
send_cookie(user)
|
||||
|
||||
|
||||
if ref is None:
|
||||
ref = "/index.html"
|
||||
|
||||
|
@ -57,33 +111,21 @@ if form.getvalue('logout'):
|
|||
|
||||
if login is not None and password is not None:
|
||||
|
||||
USERS = sql.select_users()
|
||||
session_ttl = int()
|
||||
session_ttl = sql.get_setting('session_ttl')
|
||||
session_ttl = int(session_ttl)
|
||||
|
||||
expires = datetime.datetime.utcnow() + datetime.timedelta(days=session_ttl)
|
||||
user_uuid = str(uuid.uuid4())
|
||||
user_token = str(uuid.uuid4())
|
||||
|
||||
for users in USERS:
|
||||
if login in users[1] and password == users[3]:
|
||||
c = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
c["uuid"] = user_uuid
|
||||
c["uuid"]["path"] = "/app/"
|
||||
c["uuid"]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
||||
print(c)
|
||||
sql.write_user_uuid(login, user_uuid)
|
||||
sql.write_user_token(login, user_token)
|
||||
funct.logging('locahost', sql.get_user_name_by_uuid(user_uuid)+' log in')
|
||||
print("Content-type: text/html\n")
|
||||
print('ok')
|
||||
sys.exit()
|
||||
USERS = sql.select_users(user=login)
|
||||
|
||||
for users in USERS:
|
||||
if users[6] == 1:
|
||||
if login in users[1]:
|
||||
check_in_ldap(login, password)
|
||||
else:
|
||||
if login in users[1] and password == users[3]:
|
||||
send_cookie(login)
|
||||
else:
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Somthing wrong :( I\'m sad about this, but try again!</div><br /><br />')
|
||||
sys.exit()
|
||||
print("Content-type: text/html\n")
|
||||
print('<center><div class="alert alert-danger">Somthing wrong :( I\'m sad about this, but try again!</div><br /><br />')
|
||||
sys.exit()
|
||||
|
||||
|
||||
if login is None:
|
||||
print("Content-type: text/html\n")
|
||||
if create_db.check_db():
|
||||
|
|
|
@ -614,4 +614,33 @@ if form.getvalue('get_lists'):
|
|||
list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+form.getvalue('color')
|
||||
lists = funct.get_files(dir=list, format="lst")
|
||||
for list in lists:
|
||||
print(list)
|
||||
print(list)
|
||||
|
||||
if form.getvalue('get_ldap_email'):
|
||||
username = form.getvalue('get_ldap_email')
|
||||
import ldap
|
||||
|
||||
server = sql.get_setting('ldap_server')
|
||||
port = sql.get_setting('ldap_port')
|
||||
user = sql.get_setting('ldap_user')
|
||||
password = sql.get_setting('ldap_password')
|
||||
|
||||
l = ldap.initialize("ldap://"+server+':'+port)
|
||||
try:
|
||||
l.protocol_version = ldap.VERSION3
|
||||
l.set_option(ldap.OPT_REFERRALS, 0)
|
||||
|
||||
bind = l.simple_bind_s(user, password)
|
||||
|
||||
base = "dc=kar-tel, dc=local"
|
||||
criteria = "(&(objectClass=user)(sAMAccountName="+username+"))"
|
||||
attributes = ['mail']
|
||||
result = l.search_s(base, ldap.SCOPE_SUBTREE, criteria, attributes)
|
||||
|
||||
results = [entry for dn, entry in result if isinstance(entry, dict)]
|
||||
try:
|
||||
print('["'+results[0]['mail'][0].decode("utf-8")+'","'+user.split('@')[1]+'"]')
|
||||
except:
|
||||
print('error: user not found')
|
||||
finally:
|
||||
l.unbind()
|
|
@ -22,7 +22,10 @@ def out_error(e):
|
|||
|
||||
def add_user(user, email, password, role, group):
|
||||
con, cur = create_db.get_cur()
|
||||
sql = """INSERT INTO user (username, email, password, role, groups) VALUES ('%s', '%s', '%s', '%s', '%s')""" % (user, email, password, role, group)
|
||||
if password != 'aduser':
|
||||
sql = """INSERT INTO user (username, email, password, role, groups) VALUES ('%s', '%s', '%s', '%s', '%s')""" % (user, email, password, role, group)
|
||||
else:
|
||||
sql = """INSERT INTO user (username, email, role, groups, ldap_user) VALUES ('%s', '%s', '%s', '%s', '1')""" % (user, email, role, group)
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
|
|
|
@ -447,6 +447,9 @@
|
|||
</td>
|
||||
<td>
|
||||
<input type="text" name="new-username" id="new-username" class="form-control">
|
||||
{% if ldap_enable == '1' %}
|
||||
<a href="#" title="Search user in AD" id="search_ldap_user">Search user in AD</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
</ul>
|
||||
</nav>
|
||||
<div class="copyright-menu">
|
||||
HAproxy-WI v3.2.13
|
||||
HAproxy-WI v3.3
|
||||
<br>
|
||||
<a href="https://www.patreon.com/haproxy_wi" title="Donate" target="_blank" style="color: #fff; margin-left: 30px; color: red;" class="patreon"> Patreon</a>
|
||||
</div>
|
||||
|
|
|
@ -340,6 +340,9 @@
|
|||
</td>
|
||||
<td>
|
||||
<input type="text" name="new-username" id="new-username" class="form-control">
|
||||
{% if ldap_enable == '1' %}
|
||||
<a href="#" title="Search user in AD" id="search_ldap_user">Search user in AD</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import html, http
|
||||
import http
|
||||
import cgi
|
||||
import sys
|
||||
import os
|
||||
|
@ -20,20 +20,23 @@ try:
|
|||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
user_id = cookie.get('uuid')
|
||||
user = sql.get_user_name_by_uuid(user_id.value)
|
||||
users = sql.select_users()
|
||||
servers = sql.get_dick_permit()
|
||||
token = sql.get_token(user_id.value)
|
||||
ldap_enable = sql.get_setting('ldap_enable')
|
||||
except:
|
||||
pass
|
||||
|
||||
output_from_parsed_template = template.render(title = "Admin area: users manage",
|
||||
role = sql.get_user_role_by_uuid(user_id.value),
|
||||
user = user,
|
||||
users = sql.select_users(),
|
||||
users = users,
|
||||
groups = sql.select_groups(),
|
||||
servers = sql.select_servers(full=1),
|
||||
roles = sql.select_roles(),
|
||||
masters = sql.select_servers(get_master_servers=1),
|
||||
sshs = sql.select_ssh(),
|
||||
telegrams = sql.select_telegram(),
|
||||
token = token)
|
||||
token = token,
|
||||
ldap_enable = ldap_enable)
|
||||
print(output_from_parsed_template)
|
||||
|
|
35
inc/users.js
35
inc/users.js
|
@ -362,6 +362,41 @@ $( function() {
|
|||
var id = $(this).attr('id').split('-');
|
||||
updateTelegram(id[1])
|
||||
});
|
||||
$('#search_ldap_user').click(function() {
|
||||
var valid = true;
|
||||
$('#error').remove();
|
||||
allFields = $( [] ).add( $('#new-username') )
|
||||
allFields.removeClass( "ui-state-error" );
|
||||
valid = valid && checkLength( $('#new-username'), "user name", 1 );
|
||||
user = $('#new-username').val()
|
||||
if (valid) {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
get_ldap_email: $('#new-username').val(),
|
||||
token: $('#token').val()
|
||||
},
|
||||
type: "GET",
|
||||
success: function( data ) {
|
||||
data = data.replace(/\s+/g,' ');
|
||||
if (data.indexOf('error') != '-1') {
|
||||
alert(data)
|
||||
$('#new-email').val('');
|
||||
$('#new-password').attr('readonly', false);
|
||||
$('#new-password').val('');
|
||||
} else {
|
||||
var json = $.parseJSON(data);
|
||||
$('.alert-danger').remove();
|
||||
$('#new-email').val(json[0]);
|
||||
$('#new-username').val(user+'@'+json[1]);
|
||||
$('#new-password').val('aduser');
|
||||
$('#new-password').attr('readonly', true);
|
||||
}
|
||||
}
|
||||
} );
|
||||
clearTips();
|
||||
}
|
||||
});
|
||||
|
||||
} );
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ echo ""
|
|||
echo "################################"
|
||||
|
||||
if hash apt-get 2>/dev/null; then
|
||||
apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3.5 python3-pip g++ freetype2-demos libatlas-base-dev -y
|
||||
apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3.5 python3-pip g++ freetype2-demos libatlas-base-dev openldap-dev -y
|
||||
HTTPD_CONFIG="/etc/apache2/apache2.conf"
|
||||
HAPROXY_WI_VHOST_CONF="/etc/apache2/sites-enabled/haproxy-wi.conf"
|
||||
HTTPD_NAME="apache2"
|
||||
|
@ -57,7 +57,7 @@ else
|
|||
yum -y install epel-release
|
||||
fi
|
||||
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
|
||||
yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip httpd python35u-devel gcc-c++
|
||||
yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip httpd python35u-devel gcc-c++ openldap-devel
|
||||
HTTPD_CONFIG="/etc/httpd/conf/httpd.conf"
|
||||
HAPROXY_WI_VHOST_CONF="/etc/httpd/conf.d/haproxy-wi.conf"
|
||||
HTTPD_NAME="httpd"
|
||||
|
|
|
@ -13,4 +13,5 @@ future==0.13.1
|
|||
mysql-connector-python==8.0.11
|
||||
Jinja2==2.10
|
||||
pandas==0.22.0
|
||||
bokeh==0.13.0
|
||||
bokeh==0.13.0
|
||||
python-ldap>=3.1.0
|
|
@ -15,10 +15,10 @@ chmod +x app/*py
|
|||
chmod +x app/tools/*py
|
||||
|
||||
if hash apt-get 2>/dev/null; then
|
||||
apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3-pip gcc-c++ -y
|
||||
apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3-pip gcc-c++ openldap-devel -y
|
||||
else
|
||||
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
|
||||
yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip httpd python35u-devel gcc-c++
|
||||
yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip httpd python35u-devel gcc-c++ openldap-devel
|
||||
fi
|
||||
|
||||
cd app/
|
||||
|
|
Loading…
Reference in New Issue