2019-10-28 13:44:46 +00:00
|
|
|
"""api v2 urls"""
|
2019-10-28 16:40:57 +00:00
|
|
|
from django.conf.urls import url
|
|
|
|
from django.urls import path
|
|
|
|
from drf_yasg import openapi
|
|
|
|
from drf_yasg.views import get_schema_view
|
2019-10-28 13:27:43 +00:00
|
|
|
from rest_framework import routers
|
2019-10-28 16:40:57 +00:00
|
|
|
from structlog import get_logger
|
2019-10-28 13:27:43 +00:00
|
|
|
|
2019-10-28 16:40:57 +00:00
|
|
|
from passbook.api.permissions import CustomObjectPermissions
|
2019-10-28 13:44:46 +00:00
|
|
|
from passbook.audit.api.events import EventViewSet
|
2019-10-28 13:27:43 +00:00
|
|
|
from passbook.core.api.applications import ApplicationViewSet
|
2019-10-28 16:55:36 +00:00
|
|
|
from passbook.core.api.factors import FactorViewSet
|
2019-10-28 13:27:43 +00:00
|
|
|
from passbook.core.api.groups import GroupViewSet
|
|
|
|
from passbook.core.api.invitations import InvitationViewSet
|
2019-10-28 16:40:57 +00:00
|
|
|
from passbook.core.api.policies import PolicyViewSet
|
2019-10-28 16:55:36 +00:00
|
|
|
from passbook.core.api.propertymappings import PropertyMappingViewSet
|
2019-10-28 16:40:57 +00:00
|
|
|
from passbook.core.api.providers import ProviderViewSet
|
|
|
|
from passbook.core.api.sources import SourceViewSet
|
2019-10-28 13:27:43 +00:00
|
|
|
from passbook.core.api.users import UserViewSet
|
2019-10-28 16:55:36 +00:00
|
|
|
from passbook.factors.captcha.api import CaptchaFactorViewSet
|
|
|
|
from passbook.factors.dummy.api import DummyFactorViewSet
|
|
|
|
from passbook.factors.email.api import EmailFactorViewSet
|
|
|
|
from passbook.factors.otp.api import OTPFactorViewSet
|
|
|
|
from passbook.factors.password.api import PasswordFactorViewSet
|
2019-10-28 16:40:57 +00:00
|
|
|
from passbook.lib.utils.reflection import get_apps
|
|
|
|
from passbook.policies.expiry.api import PasswordExpiryPolicyViewSet
|
|
|
|
from passbook.policies.group.api import GroupMembershipPolicyViewSet
|
|
|
|
from passbook.policies.hibp.api import HaveIBeenPwendPolicyViewSet
|
|
|
|
from passbook.policies.matcher.api import FieldMatcherPolicyViewSet
|
|
|
|
from passbook.policies.password.api import PasswordPolicyViewSet
|
|
|
|
from passbook.policies.reputation.api import ReputationPolicyViewSet
|
|
|
|
from passbook.policies.sso.api import SSOLoginPolicyViewSet
|
|
|
|
from passbook.policies.webhook.api import WebhookPolicyViewSet
|
|
|
|
from passbook.providers.app_gw.api import ApplicationGatewayProviderViewSet
|
|
|
|
from passbook.providers.oauth.api import OAuth2ProviderViewSet
|
|
|
|
from passbook.providers.oidc.api import OpenIDProviderViewSet
|
2019-10-28 16:55:36 +00:00
|
|
|
from passbook.providers.saml.api import (SAMLPropertyMappingViewSet,
|
|
|
|
SAMLProviderViewSet)
|
|
|
|
from passbook.sources.ldap.api import (LDAPPropertyMappingViewSet,
|
|
|
|
LDAPSourceViewSet)
|
2019-10-28 16:40:57 +00:00
|
|
|
from passbook.sources.oauth.api import OAuthSourceViewSet
|
2019-10-28 13:27:43 +00:00
|
|
|
|
2019-10-28 16:40:57 +00:00
|
|
|
LOGGER = get_logger()
|
2019-10-28 13:27:43 +00:00
|
|
|
router = routers.DefaultRouter()
|
2019-10-28 16:40:57 +00:00
|
|
|
|
|
|
|
for _passbook_app in get_apps():
|
|
|
|
if hasattr(_passbook_app, 'api_mountpoint'):
|
|
|
|
for prefix, viewset in _passbook_app.api_mountpoint:
|
|
|
|
router.register(prefix, viewset)
|
|
|
|
LOGGER.debug("Mounted API URLs", app_name=_passbook_app.name)
|
|
|
|
|
2019-10-28 13:27:43 +00:00
|
|
|
router.register('core/applications', ApplicationViewSet)
|
|
|
|
router.register('core/invitations', InvitationViewSet)
|
|
|
|
router.register('core/groups', GroupViewSet)
|
|
|
|
router.register('core/users', UserViewSet)
|
|
|
|
router.register('audit/events', EventViewSet)
|
2019-10-28 16:40:57 +00:00
|
|
|
router.register('sources/all', SourceViewSet)
|
|
|
|
router.register('sources/ldap', LDAPSourceViewSet)
|
|
|
|
router.register('sources/oauth', OAuthSourceViewSet)
|
|
|
|
router.register('policies/all', PolicyViewSet)
|
|
|
|
router.register('policies/passwordexpiry', PasswordExpiryPolicyViewSet)
|
|
|
|
router.register('policies/groupmembership', GroupMembershipPolicyViewSet)
|
|
|
|
router.register('policies/haveibeenpwned', HaveIBeenPwendPolicyViewSet)
|
|
|
|
router.register('policies/fieldmatcher', FieldMatcherPolicyViewSet)
|
|
|
|
router.register('policies/password', PasswordPolicyViewSet)
|
|
|
|
router.register('policies/reputation', ReputationPolicyViewSet)
|
|
|
|
router.register('policies/ssologin', SSOLoginPolicyViewSet)
|
|
|
|
router.register('policies/webhook', WebhookPolicyViewSet)
|
|
|
|
router.register('providers/all', ProviderViewSet)
|
|
|
|
router.register('providers/applicationgateway', ApplicationGatewayProviderViewSet)
|
|
|
|
router.register('providers/oauth', OAuth2ProviderViewSet)
|
|
|
|
router.register('providers/openid', OpenIDProviderViewSet)
|
|
|
|
router.register('providers/saml', SAMLProviderViewSet)
|
2019-10-28 16:55:36 +00:00
|
|
|
router.register('propertymappings/all', PropertyMappingViewSet)
|
|
|
|
router.register('propertymappings/ldap', LDAPPropertyMappingViewSet)
|
|
|
|
router.register('propertymappings/saml', SAMLPropertyMappingViewSet)
|
|
|
|
router.register('factors/all', FactorViewSet)
|
|
|
|
router.register('factors/captcha', CaptchaFactorViewSet)
|
|
|
|
router.register('factors/dummy', DummyFactorViewSet)
|
|
|
|
router.register('factors/email', EmailFactorViewSet)
|
|
|
|
router.register('factors/otp', OTPFactorViewSet)
|
|
|
|
router.register('factors/password', PasswordFactorViewSet)
|
2019-10-28 16:40:57 +00:00
|
|
|
|
|
|
|
info = openapi.Info(
|
|
|
|
title="passbook API",
|
|
|
|
default_version='v2',
|
|
|
|
# description="Test description",
|
|
|
|
# terms_of_service="https://www.google.com/policies/terms/",
|
|
|
|
contact=openapi.Contact(email="hello@beryju.org"),
|
|
|
|
license=openapi.License(name="MIT License"),
|
|
|
|
)
|
|
|
|
SchemaView = get_schema_view(
|
|
|
|
info,
|
|
|
|
public=True,
|
|
|
|
permission_classes=(CustomObjectPermissions,),
|
|
|
|
)
|
|
|
|
|
|
|
|
urlpatterns = [
|
|
|
|
url(r'^swagger(?P<format>\.json|\.yaml)$',
|
|
|
|
SchemaView.without_ui(cache_timeout=0), name='schema-json'),
|
|
|
|
path('swagger/', SchemaView.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
|
|
|
path('redoc/', SchemaView.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
|
|
|
|
] + router.urls
|