Skip to content

Commit

Permalink
add project name to api_tower_data, generate api key if blank, partial
Browse files Browse the repository at this point in the history
…fix #119
  • Loading branch information
cooperq committed Mar 31, 2021
1 parent 035e46b commit 3c3cbcf
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 29 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ venv.bak/
.mypy_cache/

# vscode
**/.vscode
**/.vscode/**

# srsLTE
srsLTE/build
Expand Down
4 changes: 3 additions & 1 deletion src/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
{
"python.pythonPath": "/usr/bin/python3"
"python.pythonPath": "/usr/bin/python3",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true
}
41 changes: 23 additions & 18 deletions src/api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ def __init__(self, watchdog):
sys.exit(1)

def signup(self):
if self.config.has_option('api', 'api_key'):
if self.config.has_option('api', 'api_key') \
and self.config['api']['api_key']:
self.logger.success(f"Your API key is {self.config['api']['api_key']}")
return
packet = {}
Expand All @@ -43,11 +44,12 @@ def signup(self):
def statistics(self):
self.check_api_key()
j = {
'api_key': self.api_key
'api_key': self.api_key,
'project': self.watchdog.project_name
}
r = requests.post(self._make_api_url("statistics"), json=j)
resp = r.json()
if r.status_code == requests.codes.okay:
if r.ok:
self.logger.info(f"Success: {resp}")
return resp
else:
Expand All @@ -62,12 +64,13 @@ def add_towers(self):
towers = [t.to_dict() for t in self.watchdog.get_all_towers_after(starting_id)]
j = {
'api_key': self.api_key,
'towers': towers
'project': self.watchdog.project_name,
'towers': towers,
}
self.logger.debug(j)
#self.logger.debug(j)
r = requests.post(self._make_api_url("add-towers"), json=j)
resp = r.json()
if r.status_code == requests.codes.okay:
if r.ok:
self.logger.info(f"Success: {resp}")
sys.exit(0)
else:
Expand All @@ -82,7 +85,7 @@ def check_api_key(self):
self.api_key = self.config['api']['api_key']

def _make_api_url(self, fragment):
return f"https://{self.api_host}:{self.api_port}/api/{fragment}"
return f"http://{self.api_host}:{self.api_port}/api/{fragment}"

if __name__ == "__main__":
from watchdog import Watchdog
Expand All @@ -96,29 +99,31 @@ def _make_api_url(self, fragment):
fmt=f"\b * %(asctime)s crocodile-hunter - %(levelname)s %(message)s"
coloredlogs.install(level="DEBUG", fmt=fmt, datefmt='%H:%M:%S')

if not 'CH_PROJ' in os.environ:
print("Please set the CH_PROJ environment variable")
sys.exit()
parser = argparse.ArgumentParser(description="Hunt stingrays. Get revenge for Steve.")
parser.add_argument('-p', '--project-name', dest='project_name', default=None,
help="specify the project's name. defaults to 'default'", action='store')
subparsers = parser.add_subparsers(dest="command", help="command")
subparsers.add_parser('signup', help="sign up for an API key")
subparsers.add_parser('add_towers', help="submit new towers to the API Server")
subparsers.add_parser('statistics', help="get some statisitcs from teh API server")
args = parser.parse_args()

class Args:
disable_gps = True
disable_wigle = False
debug = False
project_name = os.environ['CH_PROJ']
project_name = args.project_name
logger = logger
config_fp = 'config.ini'
config = configparser.ConfigParser(inline_comment_prefixes=('#', ';'))
config.read(config_fp)

if not Args.project_name:
args.project_name = Args.config['general']['default_project']

w = Watchdog(Args)
apic = ApiClient(w)

parser = argparse.ArgumentParser(description="Hunt stingrays. Get revenge for Steve.")
subparsers = parser.add_subparsers(dest="command", help="command")
subparsers.add_parser('signup', help="sign up for an API key")
subparsers.add_parser('add_towers', help="submit new towers to the API Server")
subparsers.add_parser('statistics', help="get some statisitcs from teh API server")
args = parser.parse_args()

if args.command is None:
parser.print_help(sys.stderr)
sys.exit(1)
Expand Down
15 changes: 8 additions & 7 deletions src/api_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ def __init__(self, args):
self.logger = args.logger
self.config = args.config

def user_tower_count(self, api_key):
if ApiTower.query.filter(ApiTower.api_key == api_key).count():
tower = ApiTower.query.filter(ApiTower.api_key == api_key).order_by(ApiTower.ext_id.desc())[0]
def user_tower_count(self, project, api_key):
if ApiTower.query.filter(ApiTower.api_key == api_key).filter(ApiTower.project == project).count():
tower = ApiTower.query.filter(ApiTower.api_key == api_key).filter(ApiTower.project == project).order_by(ApiTower.ext_id.desc())[0]
return tower.ext_id
else:
return 0
Expand All @@ -25,20 +25,21 @@ def all_tower_count(self):
def user_count(self):
return ApiUser.query.count()

def add_towers(self, api_key, towers):
def add_towers(self, api_key, project, towers):
old_tc = self.all_tower_count()
for tower in towers:
tower["ext_id"] = tower["id"]
tower.pop("id")
tower["api_key"] = api_key
tower["project"] = project
tower["uploaded"] = datetime.now()
t = ApiTower(**tower)
self.db_session.add(t)
self.db_session.commit()
self.db_session.close()
#self.db_session.close()
delta_tc = self.all_tower_count() - old_tc

return (delta_tc, self.user_tower_count(api_key))
return (delta_tc, self.user_tower_count(project, api_key))


def add_user(self, name, contact, description):
Expand All @@ -52,7 +53,7 @@ def add_user(self, name, contact, description):

self.db_session.add(user)
self.db_session.commit()
self.db_session.close()
#self.db_session.close()
return user

def is_key_authorized(self, api_key):
Expand Down
7 changes: 5 additions & 2 deletions src/api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,11 @@ def add_towers(self):
abort(400)

api_key = request.json['api_key']
project = request.json['project']
towers = request.json['towers']
self.check_key_auth(api_key)

(towers_added, last_record) = self.api_controller.add_towers(api_key, towers)
(towers_added, last_record) = self.api_controller.add_towers(api_key, project, towers)
return jsonify({
"error": None,
"response": {
Expand All @@ -74,14 +75,16 @@ def get_statistics(self):
abort(400)

api_key = request.json['api_key']
project = request.json['project']
self.check_key_auth(api_key)


tower_count = self.api_controller.all_tower_count()
user_tower_count = self.api_controller.user_tower_count(api_key)
user_tower_count = self.api_controller.user_tower_count(project, api_key)
return jsonify({
"error": None,
"response": {
"project": project,
"user_last_tower": user_tower_count,
"total_towers": tower_count,
}
Expand Down
1 change: 1 addition & 0 deletions src/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ def get_sector_id(self):
class ApiTower(BaseTower):
__tablename__ = "api_tower_data"
api_key = Column(String(32), ForeignKey('api_users.api_key'), nullable=False)
project = Column(String(255), nullable=False)
ext_id = Column(Integer, nullable=False)
uploaded = Column(DateTime, nullable=False)

Expand Down

0 comments on commit 3c3cbcf

Please sign in to comment.