[copr] devel: Add a api_login field (0da3d25)

pingou at fedoraproject.org pingou at fedoraproject.org
Wed Mar 20 21:00:55 UTC 2013


Repository : http://git.fedorahosted.org/cgit/copr.git

On branch  : devel

>---------------------------------------------------------------

commit 0da3d25cf605280de9794ed6f2a5bd2a499a9863
Author: Pierre-Yves Chibon <pingou at pingoured.fr>
Date:   Sun Mar 10 10:09:36 2013 +0100

    Add a api_login field
    
    Discussing with Seth it appears that the desired behavior would be
    to have a different login username when using the API vs the website.
    This commit implements a api_login which is only valid to use the API
    and won't be on the website.


>---------------------------------------------------------------

 copr_cli/README.rst                                |    2 +-
 .../versions/2a75f0a06d90_add_a_api_login_fiel.py  |   25 ++++++++++++++++++++
 coprs_frontend/coprs/models.py                     |    1 +
 coprs_frontend/coprs/templates/api.html            |    1 +
 coprs_frontend/coprs/views/api_ns/api_general.py   |    4 +++
 coprs_frontend/coprs/views/misc.py                 |    6 +++-
 6 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/copr_cli/README.rst b/copr_cli/README.rst
index 962076b..e46f5ff 100644
--- a/copr_cli/README.rst
+++ b/copr_cli/README.rst
@@ -40,7 +40,7 @@ Usage:
 ::
 
  [copr-cli]
- username = <insert here your username>
+ username = <insert here your API login>
  token = <insert here your API token>
 
 
diff --git a/coprs_frontend/alembic/versions/2a75f0a06d90_add_a_api_login_fiel.py b/coprs_frontend/alembic/versions/2a75f0a06d90_add_a_api_login_fiel.py
new file mode 100644
index 0000000..bf1bb8f
--- /dev/null
+++ b/coprs_frontend/alembic/versions/2a75f0a06d90_add_a_api_login_fiel.py
@@ -0,0 +1,25 @@
+"""Add a api_login field to user
+
+Revision ID: 2a75f0a06d90
+Revises: 544873aa3ba1
+Create Date: 2013-03-10 10:01:16.820499
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '2a75f0a06d90'
+down_revision = '544873aa3ba1'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+    """ Add the colum 'api_login' to the table user. """
+    op.add_column('user', sa.Column('api_login', sa.String(40),
+        nullable=False, server_default='default_token'))
+
+
+def downgrade():
+    """ Drop the column 'api_login' from the table user. """
+    op.drop_column('user', 'api_login')
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 8c20f86..957b80e 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -60,6 +60,7 @@ class User(db.Model, Serializer):
     mail = db.Column(db.String(150), nullable = False)
     proven = db.Column(db.Boolean, default = False)
     admin = db.Column(db.Boolean, default = False)
+    api_login = db.Column(db.String(40), nullable = False, default = 'abc')
     api_token = db.Column(db.String(40), nullable = False, default = 'abc')
     api_token_expiration = db.Column(db.Date, nullable = False, default = datetime.date(2000, 1, 1))
 
diff --git a/coprs_frontend/coprs/templates/api.html b/coprs_frontend/coprs/templates/api.html
index 85e46b8..0ea30b2 100644
--- a/coprs_frontend/coprs/templates/api.html
+++ b/coprs_frontend/coprs/templates/api.html
@@ -20,6 +20,7 @@
     {% if g.user %}
     <p>Your information:</p>
     <pre style="font-size:120%">
+    API login       :   {{ g.user.api_login }}
     API token       :   {{ g.user.api_token }}
     Expiration date :   {{ g.user.api_token_expiration }}
     </pre>
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 45471c5..6d90033 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -31,6 +31,10 @@ def api_new_token():
     """ Method use to generate a new API token for the current user.
     """
     user = flask.g.user
+    copr64 = base64.b64encode('copr') + '##'
+    api_login = helpers.generate_api_token(
+        flask.current_app.config['API_TOKEN_LENGTH'] - len(copr64))
+    user.api_login = api_login
     user.api_token = helpers.generate_api_token(
         flask.current_app.config['API_TOKEN_LENGTH'])
     user.api_token_expiration = datetime.date.today() \
diff --git a/coprs_frontend/coprs/views/misc.py b/coprs_frontend/coprs/views/misc.py
index ebb0d86..1c5a47c 100644
--- a/coprs_frontend/coprs/views/misc.py
+++ b/coprs_frontend/coprs/views/misc.py
@@ -57,7 +57,10 @@ def create_or_login(resp):
     if not user: # create if not created already
         expiration_date_token = datetime.date.today() \
             + datetime.timedelta(days=30)
+        copr64 = base64.b64encode('copr') + '##'
         user = models.User(openid_name = resp.identity_url, mail = resp.email,
+            api_login = copr64 + helpers.generate_api_token(
+                app.config['API_TOKEN_LENGTH'] - len(copr64)),
             api_token = helpers.generate_api_token(app.config['API_TOKEN_LENGTH']),
             api_token_expiration = expiration_date_token)
         db.session.add(user)
@@ -89,8 +92,7 @@ def api_login_required(f):
         token_auth = False
         if token and username:
             user = models.User.query.filter(
-                models.User.openid_name == models.User.openidize_name(username)
-                ).first()
+                models.User.api_login == username).first()
             if user \
                 and user.api_token == token \
                 and user.api_token_expiration >= datetime.date.today():



More information about the copr-devel mailing list