FastAPI-User-Auth is a simple and powerful FastAPI user RBAC authentication and authorization library. Based on FastAPI-Amis-Admin and provides a freely extensible visual management interface.

Overview

项目介绍

FastAPI-User-Auth

FastAPI-User-Auth是一个简单而强大的FastAPI用户RBAC认证与授权库.
基于FastAPI-Amis-Admin并提供可自由拓展的可视化管理界面.

Pytest Package version Downloads Chat on Gitter 229036692

源码 · 在线演示 · 文档 · 文档打不开?


FastAPI-User-Auth是一个基于 FastAPI-Amis-Admin 的应用插件,与FastAPI-Amis-Admin深度结合,为其提供用户认证与授权.

安装

pip install fastapi-user-auth

简单示例

from fastapi import FastAPI
from fastapi_amis_admin.admin.settings import Settings
from fastapi_user_auth.site import AuthAdminSite
from starlette.requests import Request

# 创建FastAPI应用
app = FastAPI()

# 创建AdminSite实例
site = AuthAdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
auth = site.auth
# 挂载后台管理系统
site.mount_app(app)


# 创建初始化数据库表
@app.on_event("startup")
async def startup():
    await site.create_db_and_tables()
    # 创建默认测试用户, 请及时修改密码!!!
    await auth.create_role_user('admin')
    await auth.create_role_user('vip')


# 要求: 用户必须登录
@app.get("/auth/get_user")
@auth.requires()
def get_user(request: Request):
    return request.user


if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, debug=True)

验证方式

装饰器

  • 推荐场景: 单个路由.支持同步/异步路由.
# 要求: 用户必须登录
@app.get("/auth/user")
@auth.requires()
def user(request: Request):
    return request.user  # 当前请求用户对象.


# 验证路由: 用户拥有admin角色
@app.get("/auth/admin_roles")
@auth.requires('admin')
def admin_roles(request: Request):
    return request.user


# 要求: 用户拥有vip角色
# 支持同步/异步路由
@app.get("/auth/vip_roles")
@auth.requires(['vip'])
async def vip_roles(request: Request):
    return request.user


# 要求: 用户拥有admin角色 或 vip角色
@app.get("/auth/admin_or_vip_roles")
@auth.requires(roles=['admin', 'vip'])
def admin_or_vip_roles(request: Request):
    return request.user


# 要求: 用户属于admin用户组
@app.get("/auth/admin_groups")
@auth.requires(groups=['admin'])
def admin_groups(request: Request):
    return request.user


# 要求: 用户拥有admin角色 且 属于admin用户组
@app.get("/auth/admin_roles_and_admin_groups")
@auth.requires(roles=['admin'], groups=['admin'])
def admin_roles_and_admin_groups(request: Request):
    return request.user


# 要求: 用户拥有vip角色 且 拥有`article:update`权限
@app.get("/auth/vip_roles_and_article_update")
@auth.requires(roles=['vip'], permissions=['article:update'])
def vip_roles_and_article_update(request: Request):
    return request.user

依赖项

  • 推荐场景: 路由集合,FastAPI应用
from fastapi import Depends
from typing import Tuple
from fastapi_user_auth.auth import Auth
from fastapi_user_auth.auth.models import User


# 路由参数依赖项
@app.get("/auth/admin_roles_depend_1")
def admin_roles(request: Request,
                auth_result: Tuple[Auth, User] = Depends(auth.requires('admin')())):
    return request.user


# 路径操作装饰器依赖项
@app.get("/auth/admin_roles_depend_2", dependencies=[Depends(auth.requires('admin')())])
def admin_roles(request: Request):
    return request.user


# 全局依赖项
# 在app应用下全部请求都要求拥有admin角色
app = FastAPI(dependencies=[Depends(auth.requires('admin')())])


@app.get("/auth/admin_roles_depend_3")
def admin_roles(request: Request):
    return request.user

中间件

  • 推荐场景: FastAPI应用
app = FastAPI()
# 在app应用下每条请求处理之前都附加`request.auth`和`request.user`对象
auth.backend.attach_middleware(app)

直接调用

  • 推荐场景: 非路由方法
from fastapi_user_auth.auth.models import User


async def get_request_user(request: Request) -> Optional[User]:
    if await auth.requires('admin', response=False)(request):
        return request.user
    else:
        return None

Token存储后端

fastapi-user-auth 支持多种token存储方式.默认为: DbTokenStore, 建议自定义修改为: JwtTokenStore

JwtTokenStore

from fastapi_user_auth.auth.backends.jwt import JwtTokenStore
from sqlalchemy.ext.asyncio import create_async_engine
from fastapi_amis_admin.utils.db import SqlalchemyAsyncClient

# 创建异步数据库引擎
engine = create_async_engine(url='sqlite+aiosqlite:///amisadmin.db', future=True)
# 使用`JwtTokenStore`创建auth对象
auth = Auth(db=SqlalchemyAsyncClient(engine),
            token_store=JwtTokenStore(secret_key='09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7'))

# 将auth对象传入AdminSite
site = AuthAdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'),
                     auth=auth)

DbTokenStore

# 使用`DbTokenStore`创建auth对象
from fastapi_user_auth.auth.backends.db import DbTokenStore

auth = Auth(db=SqlalchemyAsyncClient(engine),
            token_store=DbTokenStore(db=SqlalchemyAsyncClient(engine)))

RedisTokenStore

# 使用`RedisTokenStore`创建auth对象
from fastapi_user_auth.auth.backends.redis import RedisTokenStore
from aioredis import Redis

auth = Auth(db=SqlalchemyAsyncClient(engine),
            token_store=RedisTokenStore(redis=Redis.from_url('redis://localhost?db=0')))

RBAC模型

本系统采用的RBAC模型如下, 你也可以根据自己的需求进行拓展.

flowchart LR
	 User -. m:n .-> Group 
	 User -. m:n .-> Role 
     Group -. m:n .-> Role 
	 Role -. m:n .-> Perimission 

高级拓展

拓展User模型

from datetime import date

from fastapi_amis_admin.models.fields import Field
from fastapi_user_auth.auth.models import BaseUser


# 自定义`User`模型,继承`BaseUser`
class MyUser(BaseUser, table=True):
    birthday: date = Field(None, title="出生日期")
    location: str = Field(None, title="位置")


# 使用自定义的`User`模型,创建auth对象
auth = Auth(db=SqlalchemyAsyncClient(engine), user_model=MyUser)

拓展Role,Group,Permission模型

# 自定义`Group`模型,继承`BaseRBAC`;覆盖`Role`,`Permission`模型类似,区别在于表名.
class MyGroup(BaseRBAC, table=True):
    __tablename__ = 'auth_group'  # 数据库表名,必须是这个才能覆盖默认模型
    icon: str = Field(None, title='图标')
    is_active: bool = Field(default=True, title="是否激活")

自定义UserAuthApp默认管理类

默认管理类均可通过继承重写替换. 例如: UserLoginFormAdmin,UserRegFormAdmin,UserInfoFormAdmin, UserAdmin,GroupAdmin,RoleAdmin,PermissionAdmin

# 自定义模型管理类,继承重写对应的默认管理类
class MyGroupAdmin(admin.ModelAdmin):
    group_schema = None
    page_schema = PageSchema(label='用户组管理', icon='fa fa-group')
    model = MyGroup
    link_model_fields = [Group.roles]
    readonly_fields = ['key']


# 自定义用户认证应用,继承重写默认的用户认证应用
class MyUserAuthApp(UserAuthApp):
    GroupAdmin = MyGroupAdmin


# 自定义用户管理站点,继承重写默认的用户管理站点
class MyAuthAdminSite(AuthAdminSite):
    UserAuthApp = MyUserAuthApp


# 使用自定义的`AuthAdminSite`类,创建site对象
site = MyAuthAdminSite(settings, auth=auth)

界面预览

  • Open http://127.0.0.1:8000/admin/auth/form/login in your browser:

Login

  • Open http://127.0.0.1:8000/admin/ in your browser:

ModelAdmin

  • Open http://127.0.0.1:8000/admin/docs in your browser:

Docs

许可协议

  • fastapi-amis-admin基于Apache2.0开源免费使用,可以免费用于商业用途,但请在展示界面中明确显示关于FastAPI-Amis-Admin的版权信息.

鸣谢

感谢以下开发者对 FastAPI-User-Auth 作出的贡献:

Comments
  • Fix: 部分数据库在 alembic 生成 UserRoleLink 等数据表错误

    Fix: 部分数据库在 alembic 生成 UserRoleLink 等数据表错误

    解决部分数据库在使用 alembic 迁移数据库时报错:

    (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.InvalidTableDefinitionError'>: column "group_id" is in a primary key

    opened by dongfengweixiao 1
  • alembic upgrade head 升级数据库时报错

    alembic upgrade head 升级数据库时报错

    新增任意表后,执行 alembic revision --autogenerate -m "something" 生成脚本,执行 alembic upgrade head 时报错。

    发生异常: ProgrammingError (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.InvalidTableDefinitionError'>: column "group_id" is in a primary key [SQL: ALTER TABLE auth_group_roles ALTER COLUMN group_id DROP NOT NULL] (Background on this error at: https://sqlalche.me/e/14/f405)

    使用数据库为 pgsql,使用的驱动为 asyncpg。如需更多信息,请告知。

    opened by dongfengweixiao 1
  • Sourcery refactored master branch

    Sourcery refactored master branch

    Branch master refactored by Sourcery.

    If you're happy with these changes, merge this Pull Request using the Squash and merge strategy.

    See our documentation here.

    Run Sourcery locally

    Reduce the feedback loop during development by using the Sourcery editor plugin:

    Review changes via command line

    To manually merge these changes, make sure you're on the master branch, then run:

    git fetch origin sourcery/master
    git merge --ff-only FETCH_HEAD
    git reset HEAD^
    

    Help us improve this pull request!

    opened by sourcery-ai[bot] 1
  • 注册用户时报错 AttributeError: __aenter__

    注册用户时报错 AttributeError: __aenter__

    Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 372, in run_asgi result = await app(self.scope, self.receive, self.send) File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in call return await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/debug.py", line 96, in call raise exc from None File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/debug.py", line 93, in call await self.app(scope, receive, inner_send) File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 261, in call await super().call(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in call await self.middleware_stack(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in call raise exc File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in call await self.app(scope, receive, _send) File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 92, in call await self.simple_response(scope, receive, send, request_headers=headers) File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 147, in simple_response await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in call raise exc File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in call await self.app(scope, receive, sender) File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call raise e File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in call await route.handle(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 408, in handle await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 261, in call await super().call(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in call await self.middleware_stack(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in call raise exc File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in call await self.app(scope, receive, _send) File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in call raise exc File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in call await self.app(scope, receive, sender) File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call raise e File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in call await route.handle(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle await self.app(scope, receive, send) File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app response = await func(request) File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 217, in app solved_result = await solve_dependencies( File "/usr/local/lib/python3.9/site-packages/fastapi/dependencies/utils.py", line 527, in solve_dependencies solved = await call(**sub_values) File "/usr/local/lib/python3.9/site-packages/fastapi_amis_admin/admin/admin.py", line 832, in route return await self.handle(request, data) # type:ignore File "/usr/local/lib/python3.9/site-packages/fastapi_user_auth/admin.py", line 128, in handle async with request.auth.db.session_maker() as session: AttributeError: aenter

    opened by liufengting 0
  • [postgresql+asyncpg] 登录提示'接口报错:

    [postgresql+asyncpg] 登录提示'接口报错:"Internal Server Error"'

    fastapi_amis_admin.amis_admin 改为 fastapi_user_auth.site 中的 AuthAdminSite 后,能够显示登录页面,但是输入账号密码后,提示 "Internal Server Error"

    使用的是 fastapi_user_auth 内部自带的 models,模型部分无任何修改。

    检查日志,有如下输出:

    sys:1: SAWarning: Class SelectOfScalar will not make use of SQL compilation caching as it does not set the 'inherit_cache' attribute to ``True``.  This can have significant performance implications including some performance degradations in comparison to prior SQLAlchemy versions.  Set this attribute to True if this object can make use of the cache key generated by the superclass.  Alternatively, this attribute may be set to False which will disable this warning. (Background on this error at: https://sqlalche.me/e/14/cprf)
    INFO:     127.0.0.1:53295 - "POST /auth/form/login/api HTTP/1.1" 500 Internal Server Error
    ERROR:    Exception in ASGI application
    Traceback (most recent call last):
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 366, in run_asgi
        result = await app(self.scope, self.receive, self.send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 75, in __call__
        return await self.app(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\applications.py", line 261, in __call__
        await super().__call__(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\applications.py", line 112, in __call__
        await self.middleware_stack(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\middleware\errors.py", line 181, in __call__
        raise exc
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\middleware\errors.py", line 159, in __call__
        await self.app(scope, receive, _send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\exceptions.py", line 82, in __call__
        raise exc
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\exceptions.py", line 71, in __call__
        await self.app(scope, receive, sender)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 21, in __call__
        raise e
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__
        await self.app(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\routing.py", line 656, in __call__
        await route.handle(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\routing.py", line 408, in handle
        await self.app(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\applications.py", line 261, in __call__
        await super().__call__(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\applications.py", line 112, in __call__
        await self.middleware_stack(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\middleware\errors.py", line 181, in __call__
        raise exc
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\middleware\errors.py", line 159, in __call__
        await self.app(scope, receive, _send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\exceptions.py", line 82, in __call__
        raise exc
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\exceptions.py", line 71, in __call__
        await self.app(scope, receive, sender)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 21, in __call__
        raise e
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__
        await self.app(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\routing.py", line 656, in __call__
        await route.handle(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\routing.py", line 259, in handle
        await self.app(scope, receive, send)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\starlette\routing.py", line 61, in app
        response = await func(request)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\routing.py", line 217, in app
        solved_result = await solve_dependencies(
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi\dependencies\utils.py", line 527, in solve_dependencies
        solved = await call(**sub_values)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi_amis_admin\amis_admin\admin.py", line 739, in route
        return await self.handle(request, data)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi_user_auth\admin.py", line 39, in handle
        user = await request.auth.authenticate_user(username=data.username, password=data.password)  # type:ignore
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\fastapi_user_auth\auth\auth.py", line 92, in authenticate_user
        if user and self.pwd_context.verify(pwd, pwd2):  # 用户存在 且 密码验证通过
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\passlib\context.py", line 2343, in verify
        record = self._get_or_identify_record(hash, scheme, category)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\passlib\context.py", line 2031, in _get_or_identify_record
        return self._identify_record(hash, category)
      File "$SOMEPATH\FastAPIDemo\venv\lib\site-packages\passlib\context.py", line 1132, in identify_record
        raise exc.UnknownHashError("hash could not be identified")
    passlib.exc.UnknownHashError: hash could not be identified
    
    opened by dongfengweixiao 0
Releases(v0.2.2)
  • v0.2.2(Sep 23, 2022)

    What's Changed

    • Fix login form display order by @Sug2077 in https://github.com/amisadmin/fastapi_user_auth/pull/12

    New Contributors

    • @Sug2077 made their first contribution in https://github.com/amisadmin/fastapi_user_auth/pull/12

    Full Changelog: https://github.com/amisadmin/fastapi_user_auth/compare/v0.2.1...v0.2.2

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Aug 31, 2022)

  • v0.2.0(Jul 1, 2022)

  • v0.1.0(May 18, 2022)

    What's Changed

    • Fix: 部分数据库在 alembic 生成 UserRoleLink 等数据表错误 by @dongfengweixiao in https://github.com/amisadmin/fastapi_user_auth/pull/7

    New Contributors

    • @dongfengweixiao made their first contribution in https://github.com/amisadmin/fastapi_user_auth/pull/7

    Full Changelog: https://github.com/amisadmin/fastapi_user_auth/compare/v0.0.21...v0.1.0

    Source code(tar.gz)
    Source code(zip)
  • v0.0.21(Mar 20, 2022)

Owner
AmisAdmin
AmisAdmin
Implements a REST API using proper resource based URLs, pagination, status codes, and user authentication/authorization

Cloud Application Implements a REST API using proper resource based URLs, pagination, status codes, and user authentication/authorization. Application

null 1 Sep 11, 2022
Freely available & most common web scraping techniques intended to bypass simple anti-scraping measures

HTTP requests spoofer Freely available & most common web scraping techniques intended to bypass simple anti-scraping measures. What is this? It's a li

Maksym Korzh 6 Sep 18, 2022
A REST service that focuses exclusively on authentication and authorization.

Auth Service This service handles all authentication and authorization needs for SAT applications using JSON Web Tokens. Required Environment Variable

NC State Security Applications & Technologies 4 Sep 16, 2022
Alexa Official Management An Anime Themed Telegram Group Management Bot. Telegram Management Bot For Your Group Love U All

❤️ Alexa Management Bot V1 ❤️ Rocks Alexa A Powerful, Smart And Simple Group Manager ... Written with AioGram , Pyrogram and Telethon... ⭐️ Thanks to

Team Alexa 4 Sep 16, 2022
Authentication API server. SSO authentication via JWT for Florgon services.

Florgon auth API. Authentication API server. SSO authentication via JWT for Florgon services. See in action. API deployed and used in production here.

Florgon 21 Sep 18, 2022
The package meant will allow you use the access tokens generateted by third-party authentication provider (Google, Microsoft) to authentication with Django Application with variety of option is the settings to customize.

The package meant will allow you use the access tokens generateted by third-party authentication provider (Google, Microsoft) to authentication with Django Application with variety of option is the settings to customize.

Muhammad Algshy 1 Sep 4, 2022
FastAPI-Scheduler is a simple scheduled task management FastAPI extension based on APScheduler.

FastAPI-Scheduler 项目介绍 FastAPI-Scheduler是一个基于APScheduler的简单定时任务管理FastAPI拓展库. 安装 pip install fastapi-scheduler 简单示例 main.py: from fastapi import FastAP

AmisAdmin 5 Jun 1, 2022
FastAPI and Flussonic with securing Access to Streams (Authorization with Token) example.

FastAPI and Flussonic with securing Access to Streams (Authorization with Token) example. How to run Run $ docker-compose up -d --build FastAPI docs:

Maks Dikarev 1 Sep 4, 2022
Hospital management System having Patient, Doctor, Admin using Django framework.

This is a hospital management API based on Django REST Framework. This API features three types of users - Doctor, Patient and Admin . For authenticat

Prakanshu Sahu 1 Sep 18, 2022
DSM-tui (Decks Server Manager TUI) is a tool that allows server management by viewing active services and server status. It is developed in python with TUI (Terminal User Inteface) interface

DSM-TUI Documentation Description DSM-TUI (Decks Server Manager TUI) is a tool that allows server management by viewing active services and server sta

Aniko 3 Aug 10, 2022
Custom FastAPI boilerplate with Piccolo ORM, JWT auth, config.ini and Hashicorp Vault support

FastAPI boilerplate Work in progress! Another FastAPI Boilerplate with: Piccolo ORM and Piccolo Admin Ready JWT authentication (including DB schema an

Oleg Romanov 4 Sep 7, 2022
A simple python program that can be used to implement user authentication tokens into your program...

token-generator A simple python module that can be used by developers to implement user authentication tokens into your program... code examples creat

octo 6 Apr 18, 2022
bevigil-cli provides a unified command line interface and python library for using BeVigil OSINT API.

bevigil-cli bevigil-cli provides a unified command line interface and python library for using BeVigil OSINT API. Getting Started Installation The eas

CloudSEK BeVigil 40 Sep 15, 2022
This library provides a pure Python, asynchronous interface for the Telegram Bot API. It's compatible with Python versions 3.7+

Telegram-bot API (in Python) This library provides a pure Python, asynchronous interface for the Telegram Bot API. It's compatible with Python version

Abhineet Raj 2 Sep 10, 2022
Visual Taste Approximator (VTA) is a very simple tool that helps anyone create an automatic replica of themselves that can approximate their own personal visual taste

Visual Taste Approximator (VTA) Visual taste approximator is a very simple tool that helps anyone create an automatic replica of themselves, one that

David Beniaguev 26 Sep 19, 2022
A Python script exploiting Discord's authorization token.

Croissanted A Python script exploiting Discord's authorization token. DISCLAIMER Third party clients are not recommended and are against Discord's TOS

Arthur Pêtre 5 Mar 26, 2022
E-mail authorization with OAuth2 flow

E-mail authorization with OAuth2 flow Setup First, you need to register an app which will act on behalf of your account. With Google (GMail), just go

Robocorp 1 Jul 6, 2022
Based on python's dict bottom layer, it implements management similar to redis interface

pydis Based on python's dict bottom layer, it implements management similar to redis interface If you want to manage memory like redis, but don't want

null 12 Aug 26, 2022
Powerful and advance group management bot for Telegram.

Neko Robot // @NekoXRobot A modular telegram Python bot running on python3 with an sqlalchemy database. Originally a marie fork - Neko has evolved fur

Rachit Pal 3 Sep 14, 2022