Beispiel #1
0
def update_user_password():
    json_data = get_json_data()
    dbw = DatabaseWrapper()
    username = "******"
    new_password = json_data.get("password")
    dbw.update_password(username, new_password)
    return jsonify(password_added=new_password)
Beispiel #2
0
def update_project_info(class_url, project_url):
    new_description = request.form.get("description")
    new_long_name = request.form.get("long_name")
    new_owner = request.form.get("owner")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    dbw.update_project_info(class_url, project_url, new_description, new_long_name, new_owner)
    return jsonify(description_added=new_description)
Beispiel #3
0
def remove_contributor(username, submission_name, removed_username):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.remove_contributor(username, submission_name, removed_username)
        return jsonify(contributor_removed=removed_username)
    except StandardError as e:
        return jsonify({"error": "Placeholder error until exceptions are raised by the backend.", "exception": str(e)}), 404
Beispiel #4
0
def class_students(class_url):
    """ civered by test 0_classes / `Can list students in a class` """
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        class_obj = dbw.get_class_or_error(class_url)
        return jsonify(students=class_obj["students"])
    except ClassDoesNotExistError as e:
        return jsonify({"error": "class not found!", "exception": str(e)}), 404
Beispiel #5
0
def class_teachers(class_url):
    """ covered by test 0_classes / `Can get the teachers of a class`"""
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        class_obj = dbw.get_class_or_error(class_url)
        return jsonify(teachers=class_obj["teachers"])
    except ClassDoesNotExistError as e:
        return jsonify({"error": "class not found!", "exception": str(e)}), 404
Beispiel #6
0
def get_submission(username, submission_name):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    gitolite_url = username + "/submissions/" + submission_name
    try:
        submission=dbw.get_submission_or_error(gitolite_url=gitolite_url)
        return jsonify(submission=submission)
    except SubmissionDoesNotExistError as e:
        return jsonify(error="submission does not exist!", exception=str(e)), 404
Beispiel #7
0
def delete_user_submission(username, submission_name):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    gitolite_url = username + "/submissions/" + submission_name
    try:
        dbw.delete_submission(gitolite_url)
        return jsonify(deleted=True)
    except SubmissionDoesNotExistError:
        return jsonify(error="submission does not exist!"), 404
Beispiel #8
0
def get_project_owner(class_url, project_url):
    """ covered by test 2_projects / `Can get owner of a project` """
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        project_obj = dbw.get_project_or_error(class_url, project_url)
        return jsonify(owner=project_obj["owner"])
    except ClassDoesNotExistError as e:
        return jsonify({"error": "project not found!", "exception": str(e)}), 404
Beispiel #9
0
def add_contributor(username, submission_name):
    json_data = get_json_data()
    new_contributor = json_data.get("username")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.add_contributor(username, submission_name, new_contributor)
        return jsonify(contributor_added=new_contributor)
    except StandardError as e:
        return jsonify({"error": "Placeholder error until exceptions are raised by the backend.", "exception": str(e)}), 404
Beispiel #10
0
def update_user_info():
    json_data = get_json_data()
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    username = get_current_logged_in_user()
    if username is None:
        username = "******"  # TODO: instead raise here
    new_email = json_data.get("email")
    dbw.update_email(username, new_email)
    return jsonify(email_added=new_email)
Beispiel #11
0
def login():
    json_data = get_json_data()
    username = json_data.get("username")
    password = json_data.get("password")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    result = dbw.login(username, password)
    if not result:
        return jsonify({"error": "bad login credentials!", "exception": None}), 400
    return jsonify({"token": result}), 200
Beispiel #12
0
def add_student(class_url):
    """ covered by test 0_classes / `Student can enroll in a class` """
    json_data = get_json_data()
    student = json_data.get("username")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.add_student_to_class(class_url, student)
    except ClassDoesNotExistError as e:
        return jsonify({"error": "class not found!", "exception": str(e)}), 404
    except UserDoesNotExistError as e:
        return jsonify({"error": "username not found!", "exception": str(e)}), 404

    return jsonify(class_updated=dbw.get_class_or_error(class_url))
Beispiel #13
0
def add_teacher(class_url):
    """ covered by test 0_classes / `Teacher can add other teachers to class they own` """
    json_data = get_json_data()
    teacher = json_data.get("username")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)

    try:
        dbw.add_teacher_to_class(class_url, teacher)
    except ClassDoesNotExistError as e:
        return jsonify({"error": "class not found!", "exception": str(e)}), 404
    except UserDoesNotExistError as e:
        return jsonify({"error": "username not found!", "exception": str(e)}), 404

    return jsonify(class_updated=dbw.get_class_or_error(class_url))
Beispiel #14
0
def make_submission(class_name, project_name):
    json_data = get_json_data()
    owner = json_data.get("owner")
    url_name = class_name + "_" + project_name
    parent_url = class_name + '/' + project_name
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.create_submission(url_name, project_name, parent_url, owner)
        return jsonify(submission_made=url_name)
    except UrlNameAlreadyTakenError as e:
        return jsonify({"error": "Url name was already taken!", "exception": str(e)}), 403
    except ProjectDoesNotExistError as e:
        return jsonify({"error": "That project does not exist!", "exception": str(e)}), 404
    except ClassDoesNotExistError as e:
        return jsonify({"error": "Class does not exist!", "exception": str(e)}), 404
    except UserDoesNotExistError as e:
        return jsonify({"error": "Sorry! You need to upload a public key in order to do this!", "exception": str(e)}), 400
Beispiel #15
0
def new_class():
    """ covered by test 0_classes / `Can create classes` """
    json_data = get_json_data()
    class_name = json_data.get("class_name")
    url_name = json_data.get("url_name")
    description = json_data.get("description")

    owner = get_current_logged_in_user()
    if owner is None:
        owner = "spencer"  # TODO: instead raise here
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        c = dbw.create_class(url_name, class_name, description, owner)
        return jsonify(class_created=url_name)
    except UrlNameAlreadyTakenError as e:
        return jsonify({"error": "Url name was already taken!", "exception": str(e)}), 403
    except UserDoesNotExistError as e:
        return jsonify({"error": "Sorry! You need to upload a public key in order to do this!", "exception": str(e)}), 400
Beispiel #16
0
def new_project(class_url):
    """ covered by test 2_projects / `Teacher can create new project` """
    json_data = get_json_data()
    project_name = json_data.get("project_name")
    url_name = json_data.get("url_name")
    description = json_data.get("description")
    team_based = json_data.get("team_based") in ["True", "true", "Yes", "yes"]
    max_size = int(json_data.get("max_members"))
    due_date = json_data.get("due_date")  # TODO: check formatting from js

    owner = get_current_logged_in_user()
    if owner is None:
        owner = "spencer"  # TODO: instead raise here

    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.create_project(url_name, project_name, description, class_url, team_based, due_date, owner, max_size)
        return jsonify(project_created=url_name)
    except UrlNameAlreadyTakenError as e:
        return jsonify({"error": "Url name was already taken!", "exception": str(e)}), 403
    except ClassDoesNotExistError as e:
        return jsonify({"error": "Class does not exist!", "exception": str(e)}), 404
Beispiel #17
0
def signup():
    json_data = get_json_data()
    username = json_data.get("username")
    password = json_data.get("password")
    email = json_data.get("email")
    if '@' not in parseaddr(email)[1]:
        return jsonify({"error": "Invalid email address: "+str(email)}), 400
    if len(password) < 8:
        return jsonify({"error": "Invalid password: must be 8 characters or more"}), 400
    if len(username) < 1:
        return jsonify({"error": "Invalid username: cannot use an empty username"}), 400
    first_name = json_data.get("firstname")
    last_name = json_data.get("lastname")

    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    try:
        dbw.create_user(username, email, password, first_name, last_name)
    except UsernameAlreadyTakenError as e:
        return jsonify({"error": "Username is already taken!", "exception": str(e)}), 400
    except EmailAlreadyTakenError as e:
        return jsonify({"error": "Email is already taken!", "exception": str(e)}), 400
    result = dbw.login(username, password)
    return jsonify({"token": result}), 200
Beispiel #18
0
def get_submissions_for_user(username):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify({"submissions": dbw.get_submissions_for_user(username)})
Beispiel #19
0
def get_contributors(username, submission_name):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return dbw.get_contributors(username, submission_name)
Beispiel #20
0
def list_classes():
    """ covered by test 0_classes / `Can list classses` """
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify(classes=dbw.get_all_classes())
Beispiel #21
0
def get_class(class_url):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify({"class": dbw.get_class_or_error(class_url)})
Beispiel #22
0
def list_projects(class_url):
    """ covered by test 2_projects / `Can list projects in a class` """
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    projects = dbw.get_ontime_projects_for_class(class_url)
    overdue_projects = dbw.get_overdue_projects_for_class(class_url)
    return jsonify(projects=projects, overdue_projects=overdue_projects)
Beispiel #23
0
def new_project_due_date(class_url, project_url):
    """ covered by test 2_projects / `Can update due date in a project` """
    json_data = get_json_data()
    due_date = json_data.get("date")
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify(project_updated=dbw.update_project_due_date(class_url, project_url, due_date))
""" Importiert die Backups aus dem Speicher und 
uploaded tageweise in amazon s3 """

import os
import re
import pandas as pd
from datetime import datetime
# compatibility with ipython
# os.chdir(os.path.dirname(__file__))
from db import DatabaseWrapper
import json
import boto3
from pathlib import Path

db = DatabaseWrapper("localhost", "hafasdb2", "hafas", "123")

path = "/home/bemootzer/Documents/SoftwareProjekte/stewardless/stewardless-crawler/dbbackup"
# path = "/home/bemootzer/Documents/SoftwareProjekte/stewardless/stewardless-crawler/dbbackup"
re_sql = re.compile(r"arrival.*.sql")

_, blacklist, _ = next(os.walk(os.path.join("summaries", "data")))
blacklist.append("2020-02-01")  # data not complete

for file in os.listdir(path):
    if re_sql.match(file):
        # LOAD BACKUP
        #file = "arrivals-2020-03-01.sql"
        date_string = file.replace("arrivals-", "").replace(".sql", "")
        date = datetime.fromisoformat(date_string)
        print(date)
        if date_string in blacklist or (date <= datetime(2020, 3, 22)):
Beispiel #25
0
def get_classes_for_user(username):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify({"classes": dbw.get_classes_for_user(username)})
Beispiel #26
0
def get_landing_for_user(username):
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    classes = dbw.get_classes_for_user(username)
    projects = dbw.get_projects_for_user(username)
    submissions = dbw.get_submissions_for_user(username)
    return jsonify(dict(classes=classes, projects=projects, submissions=submissions))
Beispiel #27
0
def get_project(class_url, project_url):
    """ covered by test 2_projects / `Can list projects in a class` """
    dbw = DatabaseWrapper(GITOLITE_ADMIN_PATH, DATABASE_PORT)
    return jsonify(project=dbw.get_project_or_error(class_url, project_url))
def convert_ssh_key_to_colon_string(key):
    hexstring = hashlib.md5(key.strip().split()[1]).hexdigest()
    colonstring = ':'.join(hexstring[i:i+2] for i in range(0, len(hexstring), 2))
    return colonstring

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-p", "--mongo_port", help="the mongodb port to connect to", type=int)
    parser.add_argument("-s", "--ssh_host", help="the ssh host string to connect to")
    parser.add_argument("-pyo", "--pyolite_location", help="the folder pyolite should bind to")
    args = parser.parse_args()

    password = "******"

    dbw = DatabaseWrapper(args.pyolite_location, port=args.mongo_port, repositories_root="/var/lib/jenkins/jobs/acceptance-tests/workspace/temp")
    gw = GitoliteWrapper(args.pyolite_location)

    # give one user a REAL pubkey, so git can interact with server
    # note: this is the contents of /home/git/.ssh/test_key.pub and test_key2.pub
    test_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAObvHN/F6EX4L9/ExE4LdezTD1Dx/+fX0wZdropEyx63VxBn8HpgwVcjYq5fINAUAqtNoNpIgyXpp8RhoFv488qaCL9V7qwSf1Bnv5uaZ5lxIpdfEFXhu4JsgtdphMangwvSf2ADLASFdB99Sjxo/nxmjHsvyPZXuvYMNdmKn9ZBQyimUNpERlL4/ECVRoebnL4lD/+rzreacTiZA6KvPn8f7Xh8JNHwm9ndRCxflc8fTH+0VgkC2kpQVkWOoXqhQUQpX8fYxrmCamDG4oRAKJpF2SLkRv1OAv+jY58e2fxAUqFK/u2k6XFPn9Sxmz8pZsvp8OHAuVeSdECyoKw/J git@gitsubmit"
    test_key2 = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8DylxzTAc4y/AG/RCONTiZx2+2hfAgfuncXwZylUse6JkHKIIFbjkXqoAkmT0hsugMHb6IpnINcc41vXXOPTwjLrgMaO7r/eK6gs6rqUiVaJ3oVuJK9qw1PwPo/4O/eCQ3mtoDSm+U27/Q5D391jAuqngmMtYxQAUqS+Hv4/ORNbCNXl/b4UQYldUz3N2giNPCIXA78CCDwz4V/jOq6zejnt+DLoiBCTnCQWCIANX+Ij5pvqBP2pDtO9RnFVHEK1O2jXUHGiLq9AcLvDDYGnATwnXbXtPn5Ub0tLFcanO4DW93WTljhCS7TyzUq/MyAGwNmwi7OSVqpNYcHvhUg37 git@gitsubmit"

    # give the users some pkeys
    bogus_key = create_bogus_key()
    gw.add_pkey_to_user("student1", bogus_key["pubkey_contents"])
    bogus_key2 = create_bogus_key()
    gw.add_pkey_to_user("student2", bogus_key2["pubkey_contents"])
    bogus_key3 = create_bogus_key()
    gw.add_pkey_to_user("teacher1", bogus_key3["pubkey_contents"])
    bogus_key4 = create_bogus_key()
import boto3
from pathlib import Path
import geopandas.tools
from shapely.geometry import Point
import pymysql

# download shapefiles
countries = geopandas.GeoDataFrame.from_file(
    "https://raw.githubusercontent.com/AliceWi/TopoJSON-Germany/master/germany.json",
    layer=1,
    driver="TopoJSON")
# clean unnecessary columns
countries = countries[["id", "name", "geometry"]]
countries.columns = ["landkreise_id", "landkreis", "geometry"]

db = DatabaseWrapper("localhost", "hafasdb2", "hafas", "123")

connection_aws = pymysql.connect(host=config["host"],
                                 user=config["user"],
                                 password=config["password"],
                                 db=config["database"],
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)

connection_local = pymysql.connect(host="localhost",
                                   user="******",
                                   password="******",
                                   db="hafasdb2",
                                   charset='utf8mb4',
                                   cursorclass=pymysql.cursors.DictCursor)