예제 #1
0
def register_confirm(reg_code):
  log.info(request.url)
  try:
    auth.validate_registration(reg_code)
  except Exception, error:
    return template(request.app.config['mpcs.env.templates'] + 'register_confirm',
      auth=auth, success=False, error_message=error)
예제 #2
0
def register_confirm(reg_code):
    log.info(request.url)
    auth.validate_registration(reg_code)

    return template(request.app.config['mpcs.env.templates'] +
                    'register_confirm',
                    auth=auth)
예제 #3
0
def subscribe_submit():
    log.info(request.url)
    items = request.forms.get('stripe_token')
    stripe.api_key = request.app.config['mpcs.stripe.secret_key']

    customer_response = stripe.Customer.create(source=items, )
    stripe.Subscription.create(customer=customer_response["id"],
                               plan="premium_plan")
    auth.current_user.update(role="premium_user")
    dynamodb = boto3.resource(
        'dynamodb', region_name=request.app.config['mpcs.aws.app_region'])
    ann_table = dynamodb.Table('haoze_annotations')
    response = ann_table.scan(
        FilterExpression=Attr('username').eq(auth.current_user.username))
    items = response['Items']
    amount = response["Count"]
    client = boto3.client('glacier', region_name="us-east-1")
    for i in range(0, amount):
        if 'results_file_archive_id' in items[i]:
            response = client.initiate_job(
                vaultName='ucmpcs',
                jobParameters={
                    'Type': "archive-retrieval",
                    'ArchiveId': items[i]["results_file_archive_id"],
                    'Description': items[i]["s3_key_result_file"],
                    'SNSTopic':
                    "arn:aws:sns:us-east-1:127134666975:haoze_result_glacier",
                    'Tier': "Expedited"
                })
예제 #4
0
def user_profile():
    log.info(request.url)
    return template(request.app.config['mpcs.env.templates'] + 'profile',
                    auth=auth,
                    username=auth.current_user.username,
                    fullname=auth.current_user.description,
                    subscription=auth.current_user.role)
예제 #5
0
def register():
    log.info(request.url)
    return template(request.app.config['mpcs.env.templates'] + 'register',
                    auth=auth,
                    name="",
                    email="",
                    username="",
                    alert=False)
예제 #6
0
def login():
  log.info(request.url)
  redirect_url = "/"
  # If the user is trying to access a protected URL, go there after auhtenticating
  if request.query.redirect_url.strip() != "":
    redirect_url = request.query.redirect_url

  return template(request.app.config['mpcs.env.templates'] + 'login', 
    auth=auth, redirect_url=redirect_url, alert=False)
def login():
	log.info(request.url)
	redirect_url = "/annotations"
	# If the user is trying to access a protected URL, go there after auhtenticating
	if request.query.redirect_url.strip() != "":
		redirect_url = request.query.redirect_url

	return template(request.app.config['mpcs.env.templates'] + 'login', 
		auth=auth, redirect_url=redirect_url, alert=False)
예제 #8
0
def register():
    log.info(request.url)
    return template(request.app.config['mpcs.env.templates'] + 'register',
                    auth=auth,
                    name="",
                    email="",
                    username="",
                    alert=False,
                    success=True,
                    error_message=None)
예제 #9
0
def view_annotation_log(job_id):
    log.info(request.url)
    auth.require(fail_redirect='/login?redirect_url=' + request.url)
    dynamodb = boto3.resource(
        'dynamodb', region_name=request.app.config['mpcs.aws.app_region'])
    ann_table = dynamodb.Table('haoze_annotations')
    response = ann_table.query(KeyConditionExpression=Key('job_id').eq(job_id))
    item = json.loads(json.dumps(response['Items']))
    s3 = boto3.resource('s3',
                        region_name=request.app.config['mpcs.aws.app_region'])
    object = s3.Object(request.app.config['mpcs.aws.s3.results_bucket'],
                       item[0]["s3_key_log_file"])
    content = object.get()["Body"].read()
    return template(request.app.config['mpcs.env.templates'] +
                    'annotations_log_detail',
                    auth=auth,
                    content=content)
예제 #10
0
def get_annotations_list():
    log.info(request.url)
    auth.require(fail_redirect='/login?redirect_url=' + request.url)
    dynamodb = boto3.resource(
        'dynamodb', region_name=request.app.config['mpcs.aws.app_region'])
    ann_table = dynamodb.Table('haoze_annotations')
    response = ann_table.query(IndexName='username_index',
                               KeyConditionExpression=Key('username').eq(
                                   auth.current_user.username))
    items = response['Items']
    for i in items:
        i["submit_time"] = datetime.datetime.fromtimestamp(
            int(i["submit_time"])).strftime('%Y-%m-%d %H:%M')
    return template(request.app.config['mpcs.env.templates'] +
                    'annotations_list',
                    auth=auth,
                    items=json.dumps(items),
                    num=len(items))
예제 #11
0
def subscribe_submit():
	log.info(request.url)
예제 #12
0
def get_annotation_details(job_id):
    log.info(request.url)
    auth.require(fail_redirect='/login?redirect_url=' + request.url)
    dynamodb = boto3.resource(
        'dynamodb', region_name=request.app.config['mpcs.aws.app_region'])
    ann_table = dynamodb.Table('haoze_annotations')
    response = ann_table.query(KeyConditionExpression=Key('job_id').eq(job_id))
    item = json.loads(json.dumps(response['Items']))
    if (item[0]["username"] != auth.current_user.username):
        return template(request.app.config['mpcs.env.templates'] +
                        'no_authorized',
                        auth=auth)
    elif 'complete_time' not in item[0]:
        return template(
            request.app.config['mpcs.env.templates'] + 'annotations_detail',
            auth=auth,
            request_id=job_id,
            request_time=datetime.datetime.fromtimestamp(
                int(item[0]["submit_time"])).strftime('%Y-%m-%d %H:%M'),
            input_file=item[0]["input_file_name"],
            status=item[0]["job_status"],
            compelte_time="0",
            url="",
            job_id=0,
            file_local='')
    else:
        s3 = boto3.client(
            's3', region_name=request.app.config['mpcs.aws.app_region'])
        path = s3.generate_presigned_url(
            ClientMethod='get_object',
            Params={
                'Bucket': request.app.config['mpcs.aws.s3.results_bucket'],
                'Key': item[0]["s3_key_result_file"]
            })
        if auth.current_user.role != "premium_user":
            if 'results_file_archive_id' in item[0]:
                return template(request.app.config['mpcs.env.templates'] +
                                'annotations_detail',
                                auth=auth,
                                request_id=job_id,
                                request_time=datetime.datetime.fromtimestamp(
                                    int(item[0]["submit_time"])).strftime(
                                        '%Y-%m-%d %H:%M'),
                                input_file=item[0]["input_file_name"],
                                status=item[0]["job_status"],
                                compelte_time=datetime.datetime.fromtimestamp(
                                    int(item[0]["complete_time"])).strftime(
                                        '%Y-%m-%d %H:%M'),
                                url=path,
                                job_id=job_id,
                                file_local='glacier')
            else:
                return template(request.app.config['mpcs.env.templates'] +
                                'annotations_detail',
                                auth=auth,
                                request_id=job_id,
                                request_time=datetime.datetime.fromtimestamp(
                                    int(item[0]["submit_time"])).strftime(
                                        '%Y-%m-%d %H:%M'),
                                input_file=item[0]["input_file_name"],
                                status=item[0]["job_status"],
                                compelte_time=datetime.datetime.fromtimestamp(
                                    int(item[0]["complete_time"])).strftime(
                                        '%Y-%m-%d %H:%M'),
                                url=path,
                                job_id=job_id,
                                file_local='s3')
        else:
            return template(
                request.app.config['mpcs.env.templates'] +
                'annotations_detail',
                auth=auth,
                request_id=job_id,
                request_time=datetime.datetime.fromtimestamp(
                    int(item[0]["submit_time"])).strftime('%Y-%m-%d %H:%M'),
                input_file=item[0]["input_file_name"],
                status=item[0]["job_status"],
                compelte_time=datetime.datetime.fromtimestamp(
                    int(item[0]["complete_time"])).strftime('%Y-%m-%d %H:%M'),
                url=path,
                job_id=job_id,
                file_local='s3')
예제 #13
0
def upload_input_file():
    log.info(request.url)

    # Check that user is authenticated
    auth.require(fail_redirect='/login?redirect_url=' + request.url)

    # Use the boto session object only to get AWS credentials
    session = botocore.session.get_session()
    aws_access_key_id = str(session.get_credentials().access_key)
    aws_secret_access_key = str(session.get_credentials().secret_key)
    aws_session_token = str(session.get_credentials().token)

    # Define policy conditions
    bucket_name = request.app.config['mpcs.aws.s3.inputs_bucket']
    encryption = request.app.config['mpcs.aws.s3.encryption']
    acl = request.app.config['mpcs.aws.s3.acl']

    # Generate unique ID to be used as S3 key (name)
    key_name = request.app.config['mpcs.aws.s3.key_prefix'] + str(uuid.uuid4())

    # Redirect to a route that will call the annotator
    redirect_url = str(request.url) + "/job"

    # Define the S3 policy doc to allow upload via form POST
    # The only required elements are "expiration", and "conditions"
    # must include "bucket", "key" and "acl"; other elements optional
    # NOTE: We also must inlcude "x-amz-security-token" since we're
    # using temporary credentials via instance roles
    policy_document = str({
        "expiration":
        (datetime.datetime.utcnow() +
         datetime.timedelta(hours=24)).strftime("%Y-%m-%dT%H:%M:%SZ"),
        "conditions":
        [{
            "bucket": bucket_name
        }, ["starts-with", "$key", key_name],
         ["starts-with", "$success_action_redirect", redirect_url], {
             "x-amz-server-side-encryption": encryption
         }, {
             "x-amz-security-token": aws_session_token
         }, {
             "acl": acl
         }]
    })

    # Encode the policy document - ensure no whitespace before encoding
    policy = base64.b64encode(
        policy_document.translate(None, string.whitespace))

    # Sign the policy document using the AWS secret key
    signature = base64.b64encode(
        hmac.new(aws_secret_access_key, policy, hashlib.sha1).digest())

    # Render the upload form
    # Must pass template variables for _all_ the policy elements
    # (in addition to the AWS access key and signed policy from above)
    return template(request.app.config['mpcs.env.templates'] + 'upload',
                    auth=auth,
                    bucket_name=bucket_name,
                    s3_key_name=key_name,
                    aws_access_key_id=aws_access_key_id,
                    aws_session_token=aws_session_token,
                    redirect_url=redirect_url,
                    encryption=encryption,
                    acl=acl,
                    policy=policy,
                    signature=signature)
예제 #14
0
def logout():
	check_connection(auth)
	auth.require(fail_redirect='/login')
	log.info(request.url)
	auth.logout(success_redirect='/login')
예제 #15
0
def logout():
    check_connection(auth)
    auth.require(fail_redirect='/login')
    log.info(request.url)
    auth.logout(success_redirect='/login')
예제 #16
0
def home_page():
    log.info(request.url)
    return template(request.app.config['mpcs.env.templates'] + 'home',
                    auth=auth)
예제 #17
0
def logout():
    log.info(request.url)
    auth.logout(success_redirect='/login')
예제 #18
0
def user_profile():
	log.info(request.url)
예제 #19
0
def upload_input_file():
	log.info(request.url)
def logout():
	auth.require(fail_redirect='/')
	log.info(request.url)
	auth.logout(success_redirect='/login')
예제 #21
0
def subscribe():
	
	log.info(request.url)
예제 #22
0
def home_page():
	log.info(request.url)
	check_connection(auth)
	return template(request.app.config['mpcs.env.templates'] + 'home', auth=auth)
예제 #23
0
def register():
	log.info(request.url)
	check_connection(auth)
	return template(request.app.config['mpcs.env.templates'] + 'register',
		auth=auth, name="", email="", username="", alert=False)
예제 #24
0
def register_confirm(reg_code):
	log.info(request.url)
	check_connection(auth)
	auth.validate_registration(reg_code)
	return template(request.app.config['mpcs.env.templates'] + 'register_confirm', auth=auth)