Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// <summary>
- /// Обработчик веб запросов. Вызывается на сервере для формирования ответа на http запрос.
- /// </summary>
- /// <param name="context">HTTP контекст запроса</param>
- /// <param name="session">Сессия Web пользователя. session.User == null, если пользователь не установлен.</param>
- /// <returns>true если обработка запроса завершена и другие обработчики вызывать не требуется</returns>
- public override bool HandleWebRequest( HttpListenerContext context, WebUserSession session )
- {
- HttpListenerRequest request = context.Request;
- HttpListenerResponse response = context.Response;
- var localUrl = request.Url.LocalPath;
- switch( localUrl )
- {
- case "/api/auth/login":
- return ApiLogin( context, session );
- }
- return false;
- }
- /// <summary>
- /// Авторизация пользователя через Web-сессию
- /// </summary>
- /// <param name="context">HTTP контекст запроса</param>
- /// <param name="session">Сессия Web пользователя</param>
- private bool ApiLogin( HttpListenerContext context, WebUserSession session )
- {
- HttpListenerRequest request = context.Request;
- HttpListenerResponse response = context.Response;
- if( !CheckPostMethod( request, ref response ) )
- return true;
- string queryString;
- using( var reader = new StreamReader( request.InputStream, request.ContentEncoding ) )
- queryString = reader.ReadToEnd();
- var post = HttpUtility.ParseQueryString( queryString );
- if( post[ "login" ].IsEmpty() )
- {
- var answer = Owner.GetLocalized( "EmptyLogin", "Отсутствует информация о данных пользователя" );
- BuildResponse( answer, "error", ref response );
- return true;
- }
- var userName = post[ "login" ];
- var password = post[ "password" ];
- if( !Service.Web.WebUserLogin( userName, password, session, context, out var exception ) )
- {
- BuildResponse( exception.Message, "error", ref response );
- return true;
- }
- return true;
- }
- private bool CheckPostMethod( HttpListenerRequest request, ref HttpListenerResponse response )
- {
- if( request.HttpMethod == "POST" && request.HasEntityBody )
- return true;
- var answer = Owner.GetLocalized( "NoPostRequest", "Не передан POST запрос с данными." );
- BuildResponse( answer, "error", ref response );
- return false;
- }
- private void BuildResponse( string answer, string type, ref HttpListenerResponse response )
- {
- var buffer = Encoding.UTF8.GetBytes( CreateXmlResponse( answer, type ) );
- response.ContentLength64 = buffer.Length;
- response.ContentEncoding = Encoding.UTF8;
- response.ContentType = "text/xml";
- response.Close( buffer, true );
- }
- private string CreateXmlResponse( string answer, string type )
- {
- var xmlDoc = new XmlDocument();
- var xmlDeclaration = xmlDoc.CreateXmlDeclaration( "1.0", "UTF-8", null );
- var root = xmlDoc.DocumentElement;
- xmlDoc.InsertBefore( xmlDeclaration, root );
- var respone = xmlDoc.CreateElement( "Response" );
- respone.SetAttribute( "type", type );
- var answerText = xmlDoc.CreateTextNode( answer );
- respone.AppendChild( answerText );
- xmlDoc.AppendChild( respone );
- return xmlDoc.OuterXml;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement