This commit is contained in:
stryan 2020-11-10 15:57:02 -05:00
commit 3ebcad0d20
4 changed files with 95 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
__pycache__/
ldap_cred.py

7
ldap_cred.py.sample Normal file
View File

@ -0,0 +1,7 @@
ldap_cred = dict(
ldap_url = "ldap.example.org",
ldap_user = "uid=minecraft,ou=services,dc=example,dc=org",
ldap_pass = "Password!",
ldap_search_base = ",ou=accounts,dc=example,dc=org",
ldap_filter = "(objectclass=account)"
)

10
whitelist.json Normal file
View File

@ -0,0 +1,10 @@
[
{
"uuid": "f430dbb6-5d9a-444e-b542-e47329b2c5a0",
"name": "username"
},
{
"uuid": "e5aa0f99-2727-4a11-981f-dded8b1cd032",
"name": "username2"
}
]

76
whitelist_gen.py Executable file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env python3
import json
import requests
import argparse
from ldap3 import Server, Connection, ALL
from ldap_cred import ldap_cred
class Person(dict):
def __init__(self, username, uuid):
dict.__init__(self, name=username, uuid=uuid)
def lookupLDAPUsers():
server = Server(ldap_cred['ldap_url'], get_info=ALL)
conn = Connection(server, ldap_cred['ldap_user'], ldap_cred['ldap_pass'],
auto_bind=True)
check = conn.search(ldap_cred['ldap_search_base'],
ldap_cred['ldap_filter'], attributes=['uid'])
if check is False:
print("Error performing LDAP search")
return []
res = []
for i in conn.entries:
res.append(str(i['uid']))
return res
def lookupMCPlayer(username):
url = "https://playerdb.co/api/player/minecraft/" + username
response = requests.get(url)
if (response.status_code != 200):
print("Error looking up {}, reponse code {}"
.format(username, response.status_code))
return None
uid = response.json()["data"]['player']["id"]
return Person(username, uid)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--filename",
help="Whitelist file location," +
"defaults to ./whitelist.json",
type=str)
args = parser.parse_args()
filename = args.filename
if filename is None:
filename = "whitelist.json"
print("Loading current whitelist")
with open(filename) as json_file:
players = json.load(json_file)
player_usernames = []
for p in players:
player_usernames.append(p['name'])
print("Loading players from LDAP")
ldap_players = lookupLDAPUsers()
for p in ldap_players:
if p not in player_usernames:
m = lookupMCPlayer(p)
if m is not None:
print("Added new player {}".format(p))
players.append(m)
else:
print("Could not add new player {}".format(p))
print("Writing player whitelist to file")
with open(filename, 'w') as outfile:
json.dump(players, outfile, indent=4)
main()