You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

270 lines
8.6 KiB

""" Import profiles from file to db"""
from os import chdir
from os.path import abspath, dirname
from time import sleep
import base64
import json
import requests
from sshtunnel import open_tunnel
import paramiko
from getpass import getpass
import arangodb
import config
from helpers import now
# Gör fb-scraper till arbetsmapp
chdir(dirname(dirname(abspath(__file__))))
def mullvad_servers_to_db(db):
"""Läser fil med servarar och exporterar till db. Används bara om servarna skulle uppdateras hos Mullvad."""
with open("data/servers.txt") as f:
for line in f.readlines():
if "@" in line:
line = line.strip()
city = line[: line.find("@")].strip()
if "WireGuard" in line: # "au", "ca" #För senare när det behövs
line = line.strip()
country_short = line[:2]
server_id = line[: line.find("-")]
# Kolla så att servern inte redan används av profil i databasen
# eller finns i listan som skapas nu.
city_short = city[city.find("(") + 1 : city.find(")")]
server_name = [country_short, city_short, server_id + "-wireguard"]
server = {
"_key": server_id,
"country": country_short,
"city": city,
"id": server_id,
"server": server_id + "-wg.socks5.mullvad.net:1080",
"server_connect": server_name,
}
db.insert_document("servers", server)
sleep(0.1)
def servers_to_db(db, server_collection, socks="socks5"):
"""Läser fil med servarar och exporterar till db."""
with open("socks5free.csv") as f:
for line in f.readlines():
server = line.split(";")[1]
db.insert_document(
server_collection,
{
"_key": server,
"proxies": {
"https": f"{socks}://{server}",
"http": f"{socks}://{server}",
},
"country": False,
},
)
sleep(0.1)
def used_emails(db, collection):
cursor = db.aql.execute(
"""
FOR doc IN @@col
RETURN doc.email
""",
bind_vars={"@col": collection},
)
return [email for email in cursor]
def to_accs(db, data, info, profiles, vendor, accs="accs"):
"""
Ta profiles från köpt fil och lägg i accs
"""
used_accs = used_emails(db, accs)
used_profiles = used_emails(db, profiles)
for profile in data:
if len(profile) < 3:
print("\nKlart.\n")
break
doc = {}
doc["vendor"] = vendor
doc["created"] = now()
if "email" in info:
doc["email"] = profile[info.index("email")]
elif "login" in info:
doc["email"] = profile[info.index("login")]
if doc["email"] in used_accs or doc["email"] in used_profiles:
continue
doc["name"] = doc["email"]
if "pwd" in info:
doc["pwd"] = profile[info.index("pwd")]
else:
doc["pwd"] = ""
if "url" in info:
doc["id"] = profile[info.index("url")].replace("https;", "https:")
if "useragent" in info:
doc["useragent"] = profile[info.index("useragent")].strip()
else:
doc["useragent"] = config.user_agent
if "cookie" in info:
cookies = profile[info.index("cookie")]
if "c_user=" in cookies:
cookie = {}
for c in cookies.split(";"):
cookie[c[: c.find("=")].strip()] = c[c.find("=") + 1 :].strip()
else:
cookies_base64 = cookies.strip() # .strip('=')
# print()
# print(cookies_base64)
# print()
cookies64_bytes = cookies_base64.encode("ascii")
cookies_bytes = base64.b64decode(cookies64_bytes)
# exit()
cookies_str = (
cookies_bytes.decode("ascii")
.replace("'", '"')
.replace("False", "false")
.replace("True", "true")
)
try:
cookies = json.loads(cookies_str)
except:
for i in profile:
print(i)
exit()
cookie = {}
if vendor == "159":
for c in cookies["cookies"]:
cookie[c["name"]] = c["value"]
else:
for c in cookies:
name = c["name"]
del c["name"]
cookie[name] = c["value"]
doc["cookie"] = cookie
else:
cookie = {}
if "birthday" in info:
doc["birthday"] = profile[info.index("birthday")]
if "token" in info:
doc["token"] = profile[info.index("token")].strip()
db.insert_document(accs, doc)
sleep(0.1)
def used_servers(profiles="profiles"):
cursor = db.aql.execute(
"""
FOR doc IN @@col
RETURN doc._key
""",
bind_vars={"@col": profiles},
)
servers = [doc for doc in cursor]
return servers
def webshare_proxies():
"""Get list of webshare-proxies."""
proxielist = requests.get(
"https://proxy.webshare.io/proxy/list/download/sompzungcbajbeqmxoopddsthzarqlewjgraicog/-/http/port/direct/"
)
proxies = {}
count = 0
for line in proxielist.text.split("\n"):
count += 1
proxie = line.replace("\r", "").split(":")
if proxie != [""]:
server = proxie[0]
port = proxie[1]
proxies[count] = {"server": server, "port": port}
for _, proxie in proxies.items():
proxies = {
"https": "socks5://xigpxrzr:ezgjcwr8lonj@{server}:{port}".format(
server=proxie["server"], port=proxie["port"]
),
"http": "socks5://xigpxrzr:ezgjcwr8lonj@{server}:{port}".format(
server=proxie["server"], port=proxie["port"]
),
}
try:
db.insert_document(
"servers_webshare",
{"_key": proxie["server"], "proxies": proxies, "country": "us"},
)
except:
pass
if __name__ == "__main__":
vendors = {
"1152": {"info": "login:password:cookie:token", "sep": "|"},
"1091": {
"info": "login:password:birthday:email:email_password:useragent:cookie",
"sep": ":",
},
"1113": {
"info": "login:password:mail:password:birthday:country:useragent:token:cookie",
"sep": "|",
},
"926": {
"info": "login:password:email:email password:birthday:token:cookie",
"sep": "|",
},
#'1113': {'info': 'login:mail:password:emailpassword:birthday:useragent:token:cookie', 'sep': '|'},
"159": {"info": "login:password:mail:email password:birthday:id", "sep": ":"},
#'159': {'info': 'login:password:birthday:id:cookie', 'sep':':'
}
###############################
### Variabler att ställa in ###
country = "us"
profiles = "profiles_webshare" # ex profiles_free
servers = "servers_webshare"
###############################
accs = "accs"
file = input("Lägg filen här ").strip("'").strip()
vendor = str(file[file.rfind("-") + 1 : file.rfind(".")])
sep = vendors[vendor]["sep"]
info = vendors[vendor]["info"].split(":")
data = []
with open(file) as document:
for row in document:
row = row.replace("https:", "https;")
data.append(row.split(sep))
# Lägg in i accs
# Öppna SSH-tunnel till RBP/db.
pwd_key = getpass("Password for rsa-key: ")
with open_tunnel(
("studio-garda.asuscomm.com", 2200),
ssh_username="Lasse",
ssh_pkey=paramiko.RSAKey.from_private_key_file(
"/Users/Lasse/.ssh/id_rsa", password=pwd_key
),
ssh_private_key_password=pwd_key,
remote_bind_address=("127.0.0.1", 8529),
) as server:
port_arango = server.local_bind_port
db = arangodb.arango_connect(
"concert-hangar-mirth-salk-DECAL",
username="Accs",
host_arango="http://127.0.0.1",
port_arango=port_arango,
)
to_accs(db, data, info, profiles, vendor)