private async Task <bool> Authorised(HttpRequest req, int patientId, bool availableForDoctor) { AuthResultModel authResult; if (availableForDoctor) { int userId = await authorizationService.GetUserId(req); authResult = await authorizationService.AuthForDoctorOrPatient(req, userId); } else { authResult = await authorizationService.CheckAuthorization(req, patientId); } if (authResult.Result) { return(true); } return(false); }
public Responce ProcessRequest(Request request, IAuthorization authorizator) { if (!authorizator.CheckIdentification(request)) { return(authorizator.GetFailedResponce()); } else { if (!authorizator.CheckAuthorization(request)) { return(SendError(403)); } } string RequestUri = request.Path; RequestUri = Uri.UnescapeDataString(RequestUri); if (RequestUri.IndexOf("..") >= 0) { return(SendError(400)); } if (RequestUri.EndsWith("/")) { RequestUri += "index.html"; } string FilePath = Environment.CurrentDirectory + RequestUri; if (!File.Exists(FilePath)) { Console.WriteLine(FilePath); return(SendError(404)); } string Extension = RequestUri.Substring(RequestUri.LastIndexOf('.')); string ContentType = ""; switch (Extension) { case ".htm": case ".html": ContentType = "text/html"; break; case ".css": ContentType = "text/stylesheet"; break; case ".js": ContentType = "text/javascript"; break; case ".jpg": ContentType = "image/jpeg"; break; case ".jpeg": case ".png": case ".gif": ContentType = "image/" + Extension.Substring(1); break; default: if (Extension.Length > 1) { ContentType = "application/" + Extension.Substring(1); } else { ContentType = "application/unknown"; } break; } // Открываем файл, страхуясь на случай ошибки FileStream FS; try { FS = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); } catch (Exception) { // Если случилась ошибка, посылаем клиенту ошибку 500 return(SendError(500)); } Responce response = new Responce(); response.Version = "HTTP/1.1"; response.Status = "200 OK"; response.Headers = new Dictionary <string, string>(); response.Headers.Add("Content-type:", ContentType); response.Headers.Add("Content-Length:", FS.Length.ToString()); response.FilePath = FilePath; FS.Close(); return(response); }