Untitled
unknown
python
2 years ago
4.1 kB
10
Indexable
#!/usr/bin/python3
import random
import string
import uuid
import json
import sys
import argparse
from datetime import timedelta, datetime
SECONDS_IN_A_DAY = 24 * 60 * 60
class Identity:
def __init__(self, input_filepath, history_path, seed):
self.history = history_path
self.filepath = input_filepath
self.data = self.read_data()
self.seed = self.generate_seed() \
if seed == "" else seed
self.random = random.Random(self.seed)
self.username = self.generate_username()
self.name = self.generate_name()
self.dob, \
self.age = self.generate_dob()
self.email = self.return_email()
def generate_seed(self):
letters = string.ascii_letters
seed = ""
for letter in range(1,32):
seed+=(random.choice(letters))
return seed
def read_data(self):
with open(self.filepath, 'r') as f:
data = f.read()
return json.loads(data)
def generate_name(self):
first_names = self.data["fnames"]
last_names = self.data["lnames"]
name = f"{self.random.choice(first_names)} {self.random.choice(last_names)}"
return name
def generate_username(self):
username_list = self.data["usernames"]
generated_username = ""
for _ in range(2):
generated_username += self.random\
.choice(username_list)
return generated_username
def generate_dob(self, start=1950, end=2002):
start_date = datetime(start, 1, 1)
end_date = datetime(end, 12, 31)
delta = end_date - start_date
int_delta = delta.days * SECONDS_IN_A_DAY
random_second = random.randint(0, int_delta)
random_dob = start_date + timedelta(seconds=random_second)
current_date = datetime.now()
age = current_date.year - random_dob.year - \
((current_date.month, current_date.day) < (random_dob.month, random_dob.day))
formatted_dob = random_dob.strftime("%d.%m.%Y")
return formatted_dob, age
def print_information(self):
string_info = f"Name: {self.name}\nAge: {self.age}\nDate of birth: {self.dob}\nUsername: {self.username}\nEmail: {self.email}\nSeed: {self.seed}"
print(string_info)
def return_email(self):
email_list = self.data["emails"]
return self.random.choice(email_list)
def save_result(self):
# Read existing JSON content from "output.json" or initialize an empty dictionary if the file doesn't exist
try:
with open(self.history, "r") as f:
data = json.load(f)
except FileNotFoundError:
data = {'results': [], 'duplicates': []}
current_time = datetime.now()
formatted_time = current_time.strftime("%H.%M %d.%m.%Y")
# Create a new result dictionary with the UID
new_result = {
"uid": str(uuid.uuid4()),
"time": formatted_time,
"seed": self.seed
}
# Check if the seed has been used before
seed_used = any(result['seed'] == self.seed for result in data['results'])
if seed_used:
data['duplicates'].append(new_uid)
data['results'].append(new_result)
with open(self.history, "w") as f:
json.dump(data, f, indent=4)
def main():
parser = argparse.ArgumentParser(description="Generate a profile using input data")
parser.add_argument("--input", \
help="Path to the input JSON file", default="information.json")
parser.add_argument("--history", \
help="Path to the output JSON file", default=".identityhis.json")
parser.add_argument("--seed", \
help="Specify a seed for profile generation", type=str, default="")
args = parser.parse_args()
me = Identity(args.input, args.history, args.seed)
me.print_information()
me.save_result()
if __name__ == '__main__':
main()Editor is loading...