release candidate for staging. BUGS ARE NOT FIXED YET.
This commit is contained in:
parent
1c2bd11212
commit
04ce86a43e
5 changed files with 17 additions and 10 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## 0.3.4
|
## 0.3.4
|
||||||
|
|
||||||
- Bug fixes in `.flask_sqlalchemy`
|
- Bug fixes in `.flask_sqlalchemy` and `.sqlalchemy` — `require_auth()` is unusable before this point!
|
||||||
|
|
||||||
## 0.3.3
|
## 0.3.3
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ from .itertools import makelist, kwargs_prefix, ltuple, rtuple, additem
|
||||||
from .i18n import I18n, JsonI18n, TomlI18n
|
from .i18n import I18n, JsonI18n, TomlI18n
|
||||||
from .snowflake import Snowflake, SnowflakeGen
|
from .snowflake import Snowflake, SnowflakeGen
|
||||||
|
|
||||||
__version__ = "0.3.4-dev24"
|
__version__ = "0.3.4.rc1"
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'Siq', 'SiqCache', 'SiqType', 'SiqGen', 'StringCase',
|
'Siq', 'SiqCache', 'SiqType', 'SiqGen', 'StringCase',
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,10 @@ class Api(_Api):
|
||||||
Notably, all JSON is whitespace-free and .message is remapped to .error
|
Notably, all JSON is whitespace-free and .message is remapped to .error
|
||||||
"""
|
"""
|
||||||
def handle_error(self, e):
|
def handle_error(self, e):
|
||||||
|
### XXX apparently this handle_error does not get called AT ALL.
|
||||||
|
print(e)
|
||||||
res = super().handle_error(e)
|
res = super().handle_error(e)
|
||||||
|
print(res)
|
||||||
if isinstance(res, Mapping) and 'message' in res:
|
if isinstance(res, Mapping) and 'message' in res:
|
||||||
res['error'] = res['message']
|
res['error'] = res['message']
|
||||||
del res['message']
|
del res['message']
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@ class FlaskAuthSrc(AuthSrc):
|
||||||
def invalid_exc(self, msg: str = 'validation failed') -> Never:
|
def invalid_exc(self, msg: str = 'validation failed') -> Never:
|
||||||
abort(400, msg)
|
abort(400, msg)
|
||||||
def required_exc(self):
|
def required_exc(self):
|
||||||
abort(401)
|
abort(401, 'Login required')
|
||||||
|
|
||||||
def require_auth(cls: type[DeclarativeBase], db: SQLAlchemy) -> Callable[Any, Callable]:
|
def require_auth(cls: type[DeclarativeBase], db: SQLAlchemy) -> Callable:
|
||||||
"""
|
"""
|
||||||
Make an auth_required() decorator for Flask views.
|
Make an auth_required() decorator for Flask views.
|
||||||
|
|
||||||
|
|
@ -67,7 +67,12 @@ def require_auth(cls: type[DeclarativeBase], db: SQLAlchemy) -> Callable[Any, Ca
|
||||||
def super_secret_stuff(user):
|
def super_secret_stuff(user):
|
||||||
pass
|
pass
|
||||||
"""
|
"""
|
||||||
return partial(require_auth_base, cls=cls, src=FlaskAuthSrc(db))
|
def auth_required(**kwargs):
|
||||||
|
return require_auth_base(cls=cls, src=FlaskAuthSrc(db), **kwargs)
|
||||||
|
|
||||||
|
auth_required.__doc__ = require_auth_base.__doc__
|
||||||
|
|
||||||
|
return auth_required
|
||||||
|
|
||||||
|
|
||||||
__all__ = ('require_auth', )
|
__all__ = ('require_auth', )
|
||||||
|
|
|
||||||
|
|
@ -253,8 +253,7 @@ class AuthSrc(metaclass=ABCMeta):
|
||||||
|
|
||||||
|
|
||||||
def require_auth_base(cls: type[DeclarativeBase], *, src: AuthSrc, column: str | Column[_T] = 'id', dest: str = 'user',
|
def require_auth_base(cls: type[DeclarativeBase], *, src: AuthSrc, column: str | Column[_T] = 'id', dest: str = 'user',
|
||||||
required: bool = False, signed: bool = False, sig_dest: str = 'signature', validators: Callable | Iterable[Callable] | None = None,
|
required: bool = False, signed: bool = False, sig_dest: str = 'signature', validators: Callable | Iterable[Callable] | None = None):
|
||||||
invalid_exc: Callable | None = None, required_exc: Callable | None = None):
|
|
||||||
'''
|
'''
|
||||||
Inject the current user into a view, given the Authorization: Bearer header.
|
Inject the current user into a view, given the Authorization: Bearer header.
|
||||||
|
|
||||||
|
|
@ -275,11 +274,11 @@ def require_auth_base(cls: type[DeclarativeBase], *, src: AuthSrc, column: str |
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _default_invalid(msg: str):
|
def _default_invalid(msg: str = 'validation failed'):
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
invalid_exc = invalid_exc or _default_invalid
|
invalid_exc = src.invalid_exc or _default_invalid
|
||||||
required_exc = required_exc or (lambda: _default_invalid())
|
required_exc = src.required_exc or (lambda: _default_invalid())
|
||||||
|
|
||||||
def decorator(func: Callable):
|
def decorator(func: Callable):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue