oauth/oauth.py
author durandn
Mon, 29 Feb 2016 12:22:07 +0100
changeset 5 4407b131a70e
parent 1 5f50937893ac
child 7 cb21b50b7793
permissions -rw-r--r--
adjustments on Oauth server and mock ged client + Readme
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     1
# coding: utf-8
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     2
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     3
from datetime import datetime, timedelta
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     4
from flask import Flask
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     5
from flask import session, request
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     6
from flask import render_template, redirect, jsonify
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     7
from flask_sqlalchemy import SQLAlchemy
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     8
from werkzeug.security import gen_salt
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
     9
from flask_oauthlib.provider import OAuth2Provider
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    10
from settings.oauth_settings import OAuthSettings
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    11
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    12
app = Flask(__name__, template_folder='templates')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    13
app.debug = True
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    14
app.secret_key = 'secret'
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    15
app.config.from_object(OAuthSettings)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    16
app.config.update({
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    17
    'SQLALCHEMY_DATABASE_URI': 'sqlite:///db.sqlite',
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    18
})
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    19
db = SQLAlchemy(app)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    20
oauth = OAuth2Provider(app)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    21
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    22
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    23
class User(db.Model):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    24
    id = db.Column(db.Integer, primary_key=True)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    25
    username = db.Column(db.String(40), unique=True)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    26
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    27
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    28
class Client(db.Model):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    29
    client_id = db.Column(db.String(40), primary_key=True)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    30
    client_secret = db.Column(db.String(55), nullable=False)
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
    31
    client_type = db.Column(db.String(12), nullable=False, default='public')
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    32
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
    33
    user_id = db.Column(db.ForeignKey('user.id'))
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
    34
    user = db.relationship('User')
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
    35
    
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    36
    _redirect_uris = db.Column(db.Text)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    37
    _default_scopes = db.Column(db.Text)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    38
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    39
    @property
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    40
    def redirect_uris(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    41
        if self._redirect_uris:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    42
            return self._redirect_uris.split()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    43
        return []
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    44
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    45
    @property
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    46
    def default_redirect_uri(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    47
        return self.redirect_uris[0]
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    48
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    49
    @property
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    50
    def default_scopes(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    51
        if self._default_scopes:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    52
            return self._default_scopes.split()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    53
        return []
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    54
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    55
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    56
class Grant(db.Model):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    57
    id = db.Column(db.Integer, primary_key=True)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    58
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    59
    user_id = db.Column(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    60
        db.Integer, db.ForeignKey('user.id', ondelete='CASCADE')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    61
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    62
    user = db.relationship('User')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    63
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    64
    client_id = db.Column(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    65
        db.String(40), db.ForeignKey('client.client_id'),
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    66
        nullable=False,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    67
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    68
    client = db.relationship('Client')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    69
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    70
    code = db.Column(db.String(255), index=True, nullable=False)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    71
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    72
    redirect_uri = db.Column(db.String(255))
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    73
    expires = db.Column(db.DateTime)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    74
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    75
    _scopes = db.Column(db.Text)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    76
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    77
    def delete(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    78
        db.session.delete(self)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    79
        db.session.commit()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    80
        return self
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    81
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    82
    @property
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    83
    def scopes(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    84
        if self._scopes:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    85
            return self._scopes.split()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    86
        return []
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    87
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    88
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    89
class Token(db.Model):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    90
    id = db.Column(db.Integer, primary_key=True)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    91
    client_id = db.Column(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    92
        db.String(40), db.ForeignKey('client.client_id'),
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    93
        nullable=False,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    94
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    95
    client = db.relationship('Client')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    96
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    97
    user_id = db.Column(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    98
        db.Integer, db.ForeignKey('user.id')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
    99
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   100
    user = db.relationship('User')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   101
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   102
    # currently only bearer is supported
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   103
    token_type = db.Column(db.String(40))
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   104
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   105
    access_token = db.Column(db.String(255), unique=True)
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   106
    refresh_token = db.Column(db.String(255), unique=True, nullable=True)
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   107
    expires = db.Column(db.DateTime)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   108
    _scopes = db.Column(db.Text)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   109
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   110
    @property
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   111
    def scopes(self):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   112
        if self._scopes:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   113
            return self._scopes.split()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   114
        return []
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   115
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   116
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   117
def current_user():
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   118
    if 'id' in session:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   119
        uid = session['id']
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   120
        return User.query.get(uid)
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   121
    print(session)
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   122
    return None
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   123
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   124
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   125
@app.route('/', methods=('GET', 'POST'))
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   126
def home():
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   127
    if request.method == 'POST':
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   128
        username = request.form.get('username')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   129
        user = User.query.filter_by(username=username).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   130
        if not user:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   131
            user = User(username=username)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   132
            db.session.add(user)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   133
            db.session.commit()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   134
        session['id'] = user.id
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   135
        return redirect('/')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   136
    user = current_user()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   137
    return render_template('oauth/home.html', user=user)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   138
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   139
@oauth.clientgetter
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   140
def load_client(client_id):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   141
    return Client.query.filter_by(client_id=client_id).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   142
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   143
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   144
@oauth.grantgetter
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   145
def load_grant(client_id, code):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   146
    return Grant.query.filter_by(client_id=client_id, code=code).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   147
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   148
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   149
@oauth.grantsetter
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   150
def save_grant(client_id, code, request, *args, **kwargs):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   151
    # decide the expires time yourself
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   152
    expires = datetime.utcnow() + timedelta(seconds=100)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   153
    grant = Grant(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   154
        client_id=client_id,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   155
        code=code['code'],
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   156
        redirect_uri=request.redirect_uri,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   157
        _scopes=' '.join(request.scopes),
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   158
        user=current_user(),
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   159
        expires=expires
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   160
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   161
    db.session.add(grant)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   162
    db.session.commit()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   163
    return grant
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   164
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   165
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   166
@oauth.tokengetter
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   167
def load_token(access_token=None, refresh_token=None):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   168
    if access_token:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   169
        return Token.query.filter_by(access_token=access_token).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   170
    elif refresh_token:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   171
        return Token.query.filter_by(refresh_token=refresh_token).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   172
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   173
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   174
@oauth.tokensetter
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   175
def save_token(token, request, *args, **kwargs):
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   176
    toks = Token.query.filter_by(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   177
        client_id=request.client.client_id,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   178
        user_id=request.user.id
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   179
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   180
    # make sure that every client has only one token connected to a user
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   181
    for t in toks:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   182
        db.session.delete(t)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   183
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   184
    expires_in = token.pop('expires_in')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   185
    expires = datetime.utcnow() + timedelta(seconds=expires_in)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   186
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   187
    tok = Token(
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   188
        access_token=token['access_token'],
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   189
        token_type=token['token_type'],
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   190
        _scopes=token['scope'],
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   191
        expires=expires,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   192
        client_id=request.client.client_id,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   193
        user_id=request.user.id,
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   194
    )
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   195
    db.session.add(tok)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   196
    db.session.commit()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   197
    return tok
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   198
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   199
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   200
@app.route('/oauth/oauth2/token', methods=['GET', 'POST'])
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   201
@oauth.token_handler
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   202
def access_token():
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   203
    return None
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   204
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   205
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   206
@app.route('/oauth/oauth2/authorize', methods=['GET', 'POST'])
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   207
@oauth.authorize_handler
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   208
def authorize(*args, **kwargs):
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   209
    print(request.headers)
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   210
    user = current_user()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   211
    if not user:
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   212
        return redirect('/')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   213
    if request.method == 'GET':
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   214
        client_id = kwargs.get('client_id')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   215
        client = Client.query.filter_by(client_id=client_id).first()
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   216
        kwargs['client'] = client
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   217
        kwargs['user'] = user
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   218
        return render_template('oauth/authorize.html', **kwargs)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   219
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   220
    confirm = request.form.get('confirm', 'no')
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   221
    return confirm == 'yes'
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   222
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   223
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   224
@app.route('/rest/user/InfoComplete')
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   225
@oauth.require_oauth()
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   226
def user_info():
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   227
    user = request.oauth.user
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   228
    return jsonify(id=user.id, username=user.username)
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   229
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   230
@app.route('/rest/oauth/validate/<token>')
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   231
def validate_token(token):
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   232
    print(request.headers)
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   233
    database_token = Token.query.filter_by(access_token=token).first()
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   234
    related_client = database_token.client
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   235
    return jsonify(
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   236
        access_token=token,
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   237
        redirect_uri= related_client.redirect_uris, 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   238
        error=0,
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   239
        description= "",
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   240
        scope=database_token.scopes
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   241
    )
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   242
    
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   243
def init_client(client_id, client_secret, redirect_uris, client_owner, confidential=False):
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   244
    client = Client.query.filter_by(client_id=client_id, client_secret=client_secret).first()
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   245
    if not client:
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   246
        print("Creating client for "+client_owner)
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   247
        user = User.query.filter_by(username=client_owner).first()
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   248
        if not user:
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   249
            user = User(username=username)
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   250
            db.session.add(user)
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   251
            db.session.commit()
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   252
        if confidential:
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   253
            type="confidential"
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   254
        else:
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   255
            type="public"
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   256
        client = Client(
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   257
            client_id=client_id,
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   258
            client_secret=client_secret,
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   259
            _redirect_uris=' '.join(redirect_uris),
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   260
            _default_scopes='basic',
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   261
            user_id=user.id,
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   262
            client_type=type
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   263
        )
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   264
        db.session.add(client)
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   265
        db.session.commit()
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   266
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   267
if __name__ == '__main__':
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   268
    db.create_all()
5
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   269
    init_client(
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   270
        client_id=app.config["RENKAN_CLIENT_ID"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   271
        client_secret=app.config["RENKAN_CLIENT_SECRET"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   272
        redirect_uris=app.config["RENKAN_REDIRECT_URIS"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   273
        client_owner=app.config["RENKAN_SERVER_USER"]
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   274
    )
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   275
    init_client(
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   276
        client_id=app.config["MOCK_GED_CLIENT_ID"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   277
        client_secret=app.config["MOCK_GED_CLIENT_SECRET"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   278
        redirect_uris=app.config["MOCK_GED_REDIRECT_URIS"], 
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   279
        client_owner=app.config["MOCK_GED_SERVER_USER"],
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   280
        confidential=True
4407b131a70e adjustments on Oauth server and mock ged client + Readme
durandn
parents: 1
diff changeset
   281
    )
1
5f50937893ac Commit work on metaeducation
durandn
parents:
diff changeset
   282
    app.run()