Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/tests/conftest.py
1292 views
1
import os
2
import pytest
3
import shutil
4
from hashlib import md5
5
from random import getrandbits
6
from datetime import datetime
7
from buildyourownbotnet import create_app
8
from buildyourownbotnet.models import db, bcrypt, User, Payload, Session, Task, ExfiltratedFile
9
10
OUTPUT_DIR = os.path.abspath('buildyourownbotnet/output')
11
12
@pytest.fixture(scope='function')
13
def app_client():
14
app = create_app(test=True)
15
with app.app_context():
16
with app.test_client() as client:
17
yield client
18
cleanup()
19
20
@pytest.fixture(scope='function')
21
def new_user():
22
test_username = 'test_user'
23
user = User.query.filter_by(username=test_username).first()
24
25
# create user in database
26
if not user:
27
hashed_password = bcrypt.generate_password_hash('test_password').decode('utf-8')
28
user = User(username=test_username, password=hashed_password)
29
db.session.add(user)
30
db.session.commit()
31
32
# create user directory
33
user_dir = os.path.join(OUTPUT_DIR, user.username)
34
if not os.path.exists(user_dir):
35
os.makedirs(user_dir)
36
37
# create user src directory
38
src_dir = os.path.join(user_dir, 'src')
39
if not os.path.exists(src_dir):
40
os.makedirs(src_dir)
41
42
# create user exfiltrated files directory
43
files_dir = os.path.join(user_dir, 'files')
44
if not os.path.exists(files_dir):
45
os.makedirs(files_dir)
46
47
yield user
48
cleanup()
49
50
@pytest.fixture(scope='function')
51
def new_session(new_user):
52
uid = md5(bytes(getrandbits(10))).hexdigest()
53
session_dict = {
54
"id": 1,
55
"uid": uid,
56
"online": True,
57
"joined": datetime.utcnow(),
58
"last_online": datetime.utcnow(),
59
"public_ip": '1.2.3.4',
60
"local_ip": '192.1.1.168',
61
"mac_address": '00:0A:95:9D:68:16',
62
"username": 'test_user',
63
"administrator": True,
64
"platform": 'linux2',
65
"device": 'test_device',
66
"architecture": 'x32',
67
"latitude": 0.00,
68
"longitude": 0.00,
69
"owner": new_user.username
70
}
71
session = Session(**session_dict)
72
db.session.add(session)
73
db.session.commit()
74
yield session
75
cleanup()
76
77
def cleanup():
78
"""
79
Helper function for cleaning up database after tests.
80
"""
81
# clean up database
82
User.query.delete()
83
Session.query.delete()
84
Task.query.delete()
85
Payload.query.delete()
86
ExfiltratedFile.query.delete()
87
db.session.commit()
88
89
90
def login(client, username, password):
91
return client.post('/login',
92
data=dict(
93
username=username,
94
password=password
95
),
96
follow_redirects=True,
97
headers = {"Content-Type":"application/x-www-form-urlencoded"}
98
)
99
100
def logout(client):
101
return client.get('/logout', follow_redirects=True)
102