Исходный код ssosp.views

#coding:utf-8
u"""
Обработчики адресов сервисов по умолчанию
"""
from django.contrib.auth import get_user
from django.http import HttpResponse

from ssosp.request_response import get_request_from_data, LogoutRequest, \
    AuthRequest, get_response_from_data, LogoutResponse


[документация]def sso_acs(request): u""" Assertion Consumer Service Приемник ответов и запросов при взаимодействии для SSO посредством SAML 2.0 :param request: входящий запрос :type request: django.http.HttpRequest :return: ответ на запрос - обычно редирект на адрес SSO или адрес переданный через POST-параметр "RelayState" :rtype: django.http.HttpResponseRedirect | django.http.HttpResponse """ result = None # получим параметры пришедшего запроса next_url = request.POST.get('RelayState', None) response_data = request.POST.get('SAMLResponse', None) request_data = request.POST.get('SAMLRequest', None) if request_data: # пришел какой-то запрос req = get_request_from_data(request, request_data) if isinstance(req, LogoutRequest): # если это запрос на выход req.do_logout_by_session(request) result = HttpResponse() else: # неизвестный запрос raise Exception('Unknown request') elif response_data: # пришел какой-то ответ resp = get_response_from_data(request, response_data) if isinstance(resp, LogoutResponse): # если это ответ на выход result = resp.do_logout(request, next_url) else: # значит это ответ на вход result = resp.do_login(request, next_url) else: # неизвестный запрос pass return result
[документация]def sso_login(request, next_url=None): u""" Подготовка запроса на Identity Provider для входа в систему :param request: входящий запрос :type request: django.http.HttpRequest :param basestring next_url: следующий адрес после обработки :return: ответ на запрос - обычно редирект на адрес SSO или адрес переданный next_url :rtype: django.http.HttpResponseRedirect """ req = AuthRequest(request) if not next_url: next_url = request.GET.get('next', None) result = req.get_login(next_url) return result
[документация]def sso_logout(request, next_url=None): u""" Подготовка запроса на Identity Provider для выхода из системы :param request: входящий запрос :type request: django.http.HttpRequest :param basestring next_url: следующий адрес после обработки :return: ответ на запрос - обычно редирект на адрес SSO или адрес переданный next_url :rtype: django.http.HttpResponseRedirect """ req = LogoutRequest(request) user = get_user(request) if not next_url: next_url = request.GET.get('next', None) req.do_logout(request) result = req.get_logout(user.username, next_url) return result