|
1 | 1 | # coding: utf-8
|
2 | 2 |
|
| 3 | +from datetime import datetime, timedelta |
3 | 4 | from flask import Flask
|
4 | 5 | from flask import session, request
|
5 | 6 | from flask import render_template, redirect, jsonify
|
@@ -54,6 +55,39 @@ def default_scopes(self):
|
54 | 55 | return []
|
55 | 56 |
|
56 | 57 |
|
| 58 | +class Grant(db.Model): |
| 59 | + id = db.Column(db.Integer, primary_key=True) |
| 60 | + |
| 61 | + user_id = db.Column( |
| 62 | + db.Integer, db.ForeignKey('user.id', ondelete='CASCADE') |
| 63 | + ) |
| 64 | + user = db.relationship('User') |
| 65 | + |
| 66 | + client_id = db.Column( |
| 67 | + db.String(40), db.ForeignKey('client.client_id'), |
| 68 | + nullable=False, |
| 69 | + ) |
| 70 | + client = db.relationship('Client') |
| 71 | + |
| 72 | + code = db.Column(db.String(255), index=True, nullable=False) |
| 73 | + |
| 74 | + redirect_uri = db.Column(db.String(255)) |
| 75 | + expires = db.Column(db.DateTime) |
| 76 | + |
| 77 | + _scopes = db.Column(db.Text) |
| 78 | + |
| 79 | + def delete(self): |
| 80 | + db.session.delete(self) |
| 81 | + db.session.commit() |
| 82 | + return self |
| 83 | + |
| 84 | + @property |
| 85 | + def scopes(self): |
| 86 | + if self._scopes: |
| 87 | + return self._scopes.split() |
| 88 | + return [] |
| 89 | + |
| 90 | + |
57 | 91 | def current_user():
|
58 | 92 | if 'id' in session:
|
59 | 93 | uid = session['id']
|
@@ -100,6 +134,29 @@ def client():
|
100 | 134 | def load_client(client_id):
|
101 | 135 | return Client.query.filter_by(client_id=client_id).first()
|
102 | 136 |
|
| 137 | + |
| 138 | +@oauth.grantgetter |
| 139 | +def load_grant(client_id, code): |
| 140 | + return Grant.query.filter_by(client_id=client_id, code=code).first() |
| 141 | + |
| 142 | + |
| 143 | +@oauth.grantsetter |
| 144 | +def save_grant(client_id, code, request, *args, **kwargs): |
| 145 | + # decide the expires time yourself |
| 146 | + expires = datetime.utcnow() + timedelta(seconds=100) |
| 147 | + grant = Grant( |
| 148 | + client_id=client_id, |
| 149 | + code=code['code'], |
| 150 | + redirect_uri=request.redirect_uri, |
| 151 | + _scopes=' '.join(request.scopes), |
| 152 | + user=current_user(), |
| 153 | + expires=expires |
| 154 | + ) |
| 155 | + db.session.add(grant) |
| 156 | + db.session.commit() |
| 157 | + return grant |
| 158 | + |
| 159 | + |
103 | 160 | if __name__ == '__main__':
|
104 | 161 | db.create_all()
|
105 | 162 | app.run()
|
0 commit comments