Advertisement
Guest User

Untitled

a guest
Jan 9th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.51 KB | None | 0 0
  1. /// <summary>
  2. /// Обработчик веб запросов. Вызывается на сервере для формирования ответа на http запрос.
  3. /// </summary>
  4. /// <param name="context">HTTP контекст запроса</param>
  5. /// <param name="session">Сессия Web пользователя. session.User == null, если пользователь не установлен.</param>
  6. /// <returns>true если обработка запроса завершена и другие обработчики вызывать не требуется</returns>
  7. public override bool HandleWebRequest( HttpListenerContext context, WebUserSession session )
  8. {
  9.     HttpListenerRequest request = context.Request;
  10.     HttpListenerResponse response = context.Response;
  11.  
  12.     var localUrl = request.Url.LocalPath;
  13.     switch( localUrl )
  14.     {
  15.         case "/api/auth/login":
  16.             return ApiLogin( context, session );
  17.     }
  18.  
  19.     return false;
  20. }
  21.  
  22. /// <summary>
  23. /// Авторизация пользователя через Web-сессию
  24. /// </summary>
  25. /// <param name="context">HTTP контекст запроса</param>
  26. /// <param name="session">Сессия Web пользователя</param>
  27. private bool ApiLogin( HttpListenerContext context, WebUserSession session )
  28. {
  29.     HttpListenerRequest request = context.Request;
  30.     HttpListenerResponse response = context.Response;
  31.  
  32.     if( !CheckPostMethod( request, ref response ) )
  33.         return true;
  34.  
  35.     string queryString;
  36.     using( var reader = new StreamReader( request.InputStream, request.ContentEncoding ) )
  37.         queryString = reader.ReadToEnd();
  38.  
  39.     var post = HttpUtility.ParseQueryString( queryString );
  40.     if( post[ "login" ].IsEmpty() )
  41.     {
  42.         var answer = Owner.GetLocalized( "EmptyLogin", "Отсутствует информация о данных пользователя" );
  43.         BuildResponse( answer, "error", ref response );
  44.         return true;
  45.     }
  46.  
  47.     var userName = post[ "login" ];
  48.     var password = post[ "password" ];
  49.     if( !Service.Web.WebUserLogin( userName, password, session, context, out var exception ) )
  50.     {
  51.         BuildResponse( exception.Message, "error", ref response );
  52.         return true;
  53.     }
  54.  
  55.     return true;
  56. }
  57.  
  58. private bool CheckPostMethod( HttpListenerRequest request, ref HttpListenerResponse response )
  59. {
  60.     if( request.HttpMethod == "POST" && request.HasEntityBody )
  61.         return true;
  62.  
  63.     var answer = Owner.GetLocalized( "NoPostRequest", "Не передан POST запрос с данными." );
  64.     BuildResponse( answer, "error", ref response );
  65.     return false;
  66. }
  67.  
  68. private void BuildResponse( string answer, string type, ref HttpListenerResponse response )
  69. {
  70.     var buffer = Encoding.UTF8.GetBytes( CreateXmlResponse( answer, type ) );
  71.     response.ContentLength64 = buffer.Length;
  72.     response.ContentEncoding = Encoding.UTF8;
  73.     response.ContentType = "text/xml";
  74.     response.Close( buffer, true );
  75. }
  76.  
  77. private string CreateXmlResponse( string answer, string type )
  78. {
  79.     var xmlDoc = new XmlDocument();
  80.     var xmlDeclaration = xmlDoc.CreateXmlDeclaration( "1.0", "UTF-8", null );
  81.     var root = xmlDoc.DocumentElement;
  82.     xmlDoc.InsertBefore( xmlDeclaration, root );
  83.  
  84.     var respone = xmlDoc.CreateElement( "Response" );
  85.     respone.SetAttribute( "type", type );
  86.     var answerText = xmlDoc.CreateTextNode( answer );
  87.     respone.AppendChild( answerText );
  88.     xmlDoc.AppendChild( respone );
  89.  
  90.     return xmlDoc.OuterXml;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement