13
13
from .cache import Cache
14
14
15
15
16
- __all__ = ('GrantCacheBinding ' , 'SQLAlchemyBinding ' )
16
+ __all__ = ('bind_cache_grant ' , 'bind_sqlalchemy ' )
17
17
18
18
19
19
log = logging .getLogger ('flask_oauthlib' )
@@ -63,8 +63,32 @@ def keys(self):
63
63
return ['client_id' , 'code' , 'redirect_uri' , 'scopes' , 'user' ]
64
64
65
65
66
- def grant_cache_binding (app , provider , current_user ):
67
- cache = Cache (app , 'OAUTH2' )
66
+ def bind_cache_grant (app , provider , current_user , config_prefix = 'OAUTH2' ):
67
+ """Configures an :class:`OAuth2Provider` instance to use various caching
68
+ systems to get and set the grant token. This removes the need to
69
+ register :func:`grantgetter` and :func:`grantsetter` yourself.
70
+
71
+ :param app: Flask application instance
72
+ :param provider: :class:`OAuth2Provider` instance
73
+ :param current_user: function that returns an :class:`User` object
74
+ :param config_prefix: prefix for config
75
+
76
+ A usage example::
77
+
78
+ oauth = OAuth2Provider(app)
79
+ app.config.update({'OAUTH2_CACHE_TYPE': 'redis'})
80
+
81
+ bind_cache_grant(app, oauth, current_user)
82
+
83
+ You can define which cache system you would like to use by setting the
84
+ following configuration option::
85
+
86
+ OAUTH2_CACHE_TYPE = 'null' // memcache, simple, redis, filesystem
87
+
88
+ For more information on the supported cache systems please visit:
89
+ `Cache <http://werkzeug.pocoo.org/docs/contrib/cache/>`_
90
+ """
91
+ cache = Cache (app , config_prefix )
68
92
69
93
@provider .grantsetter
70
94
def create_grant (client_id , code , request , * args , ** kwargs ):
@@ -75,7 +99,7 @@ def create_grant(client_id, code, request, *args, **kwargs):
75
99
code = code ['code' ],
76
100
redirect_uri = request .redirect_uri ,
77
101
scopes = request .scopes ,
78
- user = current_user ()
102
+ user = current_user (),
79
103
)
80
104
log .debug ("Set Grant Token with key {0}" .format (grant .key ))
81
105
cache .set (grant .key , dict (grant ))
@@ -94,25 +118,25 @@ def get(client_id, code):
94
118
return grant
95
119
96
120
97
- class SQLAlchemyBinding (object ):
121
+ def bind_sqlalchemy (provider , session , user = None , client = None ,
122
+ token = None , grant = None , current_user = None ):
98
123
"""Configures the given :class:`OAuth2Provider` instance with the
99
124
required getters and setters for persistence with SQLAlchemy.
100
125
101
126
An example of using all models::
102
127
103
128
oauth = OAuth2Provider(app)
104
129
105
- SQLAlchemyBinding (oauth, session, user=User, client=Client,
106
- token=Token, grant=Grant, current_user=current_user)
130
+ bind_sqlalchemy (oauth, session, user=User, client=Client,
131
+ token=Token, grant=Grant, current_user=current_user)
107
132
108
133
You can omit any model if you wish to register the functions yourself.
109
134
It is also possible to override the functions by registering them
110
135
afterwards::
111
136
112
137
oauth = OAuth2Provider(app)
113
138
114
- SQLAlchemyBinding(oauth, session, user=User, client=Client,
115
- token=Token)
139
+ bind_sqlalchemy(oauth, session, user=User, client=Client, token=Token)
116
140
117
141
@oauth.grantgetter
118
142
def get_grant(client_id, code):
@@ -141,32 +165,27 @@ def set_token(token, request, *args, **kwargs):
141
165
:param token: :class:`Token` model
142
166
:param grant: :class:`Grant` model
143
167
:param current_user: function that returns a :class:`User` object
144
-
145
168
"""
146
-
147
- def __init__ (self , provider , session , user = None , client = None ,
148
- token = None , grant = None , current_user = None ):
149
-
150
- if user :
151
- user_binding = UserBinding (user , session )
152
- provider .usergetter (user_binding .get )
153
-
154
- if client :
155
- client_binding = ClientBinding (client , session )
156
- provider .clientgetter (client_binding .get )
157
-
158
- if token :
159
- token_binding = TokenBinding (token , session )
160
- provider .tokengetter (token_binding .get )
161
- provider .tokensetter (token_binding .set )
162
-
163
- if grant :
164
- if not current_user :
165
- raise ValueError (('`current_user` is required'
166
- 'for Grant Binding' ))
167
- grant_binding = GrantBinding (grant , session , current_user )
168
- provider .grantgetter (grant_binding .get )
169
- provider .grantsetter (grant_binding .set )
169
+ if user :
170
+ user_binding = UserBinding (user , session )
171
+ provider .usergetter (user_binding .get )
172
+
173
+ if client :
174
+ client_binding = ClientBinding (client , session )
175
+ provider .clientgetter (client_binding .get )
176
+
177
+ if token :
178
+ token_binding = TokenBinding (token , session )
179
+ provider .tokengetter (token_binding .get )
180
+ provider .tokensetter (token_binding .set )
181
+
182
+ if grant :
183
+ if not current_user :
184
+ raise ValueError (('`current_user` is required'
185
+ 'for Grant Binding' ))
186
+ grant_binding = GrantBinding (grant , session , current_user )
187
+ provider .grantgetter (grant_binding .get )
188
+ provider .grantsetter (grant_binding .set )
170
189
171
190
172
191
class BaseBinding (object ):
0 commit comments