Exemple #1
0
def orcid_auth():
    access_token_url = 'https://pub.orcid.org/oauth/token'

    payload = dict(client_id="APP-PF0PDMP7P297AU8S",
                   redirect_uri=request.json['redirectUri'],
                   client_secret=os.getenv('ORCID_CLIENT_SECRET'),
                   code=request.json['code'],
                   grant_type='authorization_code')


    # Exchange authorization code for access token
    # The access token has the ORCID ID, which is actually all we need here.
    r = requests.post(access_token_url, data=payload)
    try:
        my_orcid_id = r.json()["orcid"]
    except KeyError:
        print u"Aborting /api/auth/orcid " \
              u"with 500 because didn't get back orcid in oauth json. got this instead: {}".format(r.json())
        abort_json(500, "Invalid JSON return from ORCID during OAuth.")

    my_person = Person.query.filter_by(orcid_id=my_orcid_id).first()

    try:
        token = my_person.get_token()
    except AttributeError:  # my_person is None. So make a new user

        my_person = make_person(my_orcid_id, high_priority=True)
        token = my_person.get_token()

    set_person_claimed_at(my_person)

    return jsonify(token=token)
Exemple #2
0
def orcid_auth():
    access_token_url = 'https://pub.orcid.org/oauth/token'

    payload = dict(client_id="APP-PF0PDMP7P297AU8S",
                   redirect_uri=request.json['redirectUri'],
                   client_secret=os.getenv('ORCID_CLIENT_SECRET'),
                   code=request.json['code'],
                   grant_type='authorization_code')

    # Exchange authorization code for access token
    # The access token has the ORCID ID, which is actually all we need here.
    r = requests.post(access_token_url, data=payload)
    my_orcid_id = r.json()["orcid"]
    my_person = Person.query.filter_by(orcid_id=my_orcid_id).first()

    try:
        token = my_person.get_token()
    except AttributeError:  # my_person is None. So make a new user

        # @todo: make_person() is untested. Test.
        my_person = make_person(my_orcid_id, high_priority=True)
        token = my_person.get_token()

    set_person_claimed_at(my_person)

    return jsonify(token=token)
Exemple #3
0
def load_campaign(filename, campaign=None, limit=None):

    with open("data/" + filename, "r") as f:
        lines = f.read().split("\n")
        print "found {} ORCID lines".format(len(lines))

    print len(lines)

    if limit:
        lines = lines[:limit]

    total_start = time()
    row_num = 0
    for line in lines:
        row_num += 1

        # can have # as comments
        if line.startswith("#"):
            print "skipping comment line"
            continue

        loop_start = time()
        email = None

        if "," in line:
            (dirty_orcid, email, twitter) = line.split(",")
        else:
            dirty_orcid = line

        try:
            orcid_id = clean_orcid(dirty_orcid)
        except NoOrcidException:
            try:
                print u"\n\nWARNING: no valid orcid_id in line {}; skipping\n\n".format(
                    line)
            except UnicodeDecodeError:
                print u"\n\nWARNING: no valid orcid_id and line throws UnicodeDecodeError; skipping\n\n"
            continue

        my_person = Person.query.filter_by(orcid_id=orcid_id).first()
        if my_person:
            print u"row {}, already have person {}, skipping".format(
                row_num, orcid_id)
        else:
            print u"row {}, making person {}".format(row_num, orcid_id)
            my_person = make_person(orcid_id, high_priority=False)
            my_person.campaign = campaign
            my_person.email = email
            my_person.twitter = twitter
            db.session.merge(my_person)
            commit_success = safe_commit(db)
            if not commit_success:
                print u"COMMIT fail on {}".format(my_person.orcid_id)

        print "row {}: finished {} in {}s\n".format(row_num, orcid_id,
                                                    elapsed(loop_start))

    print "finished load_campaign on {} profiles in {}s\n".format(
        len(lines), elapsed(total_start))
Exemple #4
0
def profile_endpoint(orcid_id):
    my_person = Person.query.filter_by(orcid_id=orcid_id).first()
    if not my_person:
        try:
            my_person = make_person(orcid_id, high_priority=True)
        except (OrcidDoesNotExist, NoOrcidException):
            print u"returning 404: orcid profile {} does not exist".format(orcid_id)
            abort_json(404, "That ORCID profile doesn't exist")
    return json_resp(my_person.to_dict())
def load_campaign(filename, campaign=None, limit=None):

    with open("data/" + filename, "r") as f:
        lines = f.read().split("\n")
        print "found {} ORCID lines".format(len(lines))

    print len(lines)

    if limit:
        lines = lines[:limit]


    total_start = time()
    row_num = 0
    for line in lines:
        row_num += 1

        # can have # as comments
        if line.startswith("#"):
            print "skipping comment line"
            continue

        loop_start = time()
        email = None

        if "," in line:
            (dirty_orcid, email, twitter) = line.split(",")
        else:
            dirty_orcid = line

        try:
            orcid_id = clean_orcid(dirty_orcid)
        except NoOrcidException:
            try:
                print u"\n\nWARNING: no valid orcid_id in line {}; skipping\n\n".format(line)
            except UnicodeDecodeError:
                print u"\n\nWARNING: no valid orcid_id and line throws UnicodeDecodeError; skipping\n\n"
            continue

        my_person = Person.query.filter_by(orcid_id=orcid_id).first()
        if my_person:
            print u"row {}, already have person {}, skipping".format(row_num, orcid_id)
        else:
            print u"row {}, making person {}".format(row_num, orcid_id)
            my_person = make_person(orcid_id, store_in_db=True)
            my_person.campaign = campaign
            my_person.email = email
            my_person.twitter = twitter
            db.session.merge(my_person)
            commit_success = safe_commit(db)
            if not commit_success:
                print u"COMMIT fail on {}".format(my_person.orcid_id)

        print "row {}: finished {} in {}s\n".format(row_num, orcid_id, elapsed(loop_start))

    print "finished load_campaign on {} profiles in {}s\n".format(len(lines), elapsed(total_start))
Exemple #6
0
def twitter_register_but_login_if_they_are_already_registered():
    twitter_creds = get_twitter_creds(request.json.get('oauth_token'), request.json.get('oauth_verifier'))
    if not twitter_creds:
        print u"error in twitter_register_but_login_if_they_are_already_registered, empty twitter creds"
        abort_json(422, "empty twitter creds")

    try:
        my_person = make_person(twitter_creds)
    except PersonExistsException:
        my_person = Person.query.filter_by(twitter=twitter_creds["screen_name"]).first()

    return jsonify({"token": my_person.get_token()})
def create_person(dirty_orcid, campaign=None, store_in_db=False):

    try:
        orcid_id = clean_orcid(dirty_orcid)
    except NoOrcidException:
        print u"\n\nWARNING: no valid orcid_id in {}; skipping\n\n".format(dirty_orcid)
        raise

    if store_in_db:
        print u"storing in db"
        my_person = make_person(orcid_id, store_in_db=True)
        if campaign:
            my_person.campaign = campaign
            db.session.add(my_person)
            success = safe_commit(db)
            if not success:
                print u"ERROR!  committing {}".format(my_person.orcid_id)
    else:
        print u"NOT storing in db"
        my_person = make_person(orcid_id, store_in_db=False)
        print my_person
Exemple #8
0
def create_person(dirty_orcid, campaign=None, store_in_db=False):

    try:
        orcid_id = clean_orcid(dirty_orcid)
    except NoOrcidException:
        print u"\n\nWARNING: no valid orcid_id in {}; skipping\n\n".format(
            dirty_orcid)
        raise

    if store_in_db:
        print u"storing in db"
        my_person = make_person(orcid_id, store_in_db=True)
        if campaign:
            my_person.campaign = campaign
            db.session.add(my_person)
            success = safe_commit(db)
            if not success:
                print u"ERROR!  committing {}".format(my_person.orcid_id)
    else:
        print u"NOT storing in db"
        my_person = make_person(orcid_id, store_in_db=False)
        print my_person
Exemple #9
0
def twitter_register_but_login_if_they_are_already_registered():
    twitter_creds = get_twitter_creds(request.json.get('oauth_token'), request.json.get('oauth_verifier'))
    landing_page = request.json.get("customLandingPage", "default")
    if not twitter_creds:
        print u"error in twitter_register_but_login_if_they_are_already_registered, empty twitter creds"
        abort_json(422, "empty twitter creds")

    try:
        my_person = make_person(twitter_creds, landing_page=landing_page)
    except PersonExistsException:
        my_person = Person.query.filter_by(twitter=twitter_creds["screen_name"]).first()

    return jsonify({"token": my_person.get_token()})