public IHttpActionResult ExportSearchResultToExcel(string searchText)
        {
            ISearchResult searchResult;
            var           search = JsonConvert.DeserializeObject <SearchParameters>(searchText);

            try
            {
                string language = WebHelper.GetClientLanguage(Request);
                var    error    = entityProvider.CheckSearchParameters(search, language);

                if (!string.IsNullOrEmpty(error))
                {
                    return(new BadRequestErrorMessageResult(error, this));
                }
                var access = GetUserAccess(language);

                search.Paging.Skip = 0;
                search.Paging.Take = 10000;
                searchResult       = entityProvider.Search <SearchRecord>(search, access);

                if (searchResult is SearchResult <SearchRecord> searchRecords)
                {
                    return(ResponseMessage(veExportRecordHelper.CreateExcelFile(
                                               ConvertExportData(searchRecords.Entities.Items.Select(i => i.Data).ToList()), language,
                                               FrontendSettingsViaduc.Instance.GetTranslation(language, "veExportRecord.fileName") +
                                               $"-{DateTime.Now.ToString("yyyy-MM-dd-hh_mm_ss")}.xlsx",
                                               FrontendSettingsViaduc.Instance.GetTranslation("en", "veExportRecord.fileName") +
                                               $"-{DateTime.Now.ToString("yyyy-MM-dd-hh_mm_ss")}.xlsx")));
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Search for {searchQuery} failed", JsonConvert.SerializeObject(search, Formatting.Indented));
                return(InternalServerError(ex));
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Beispiel #2
0
        public IHttpActionResult Search([FromBody] SearchParameters search)
        {
            if (ControllerHelper.HasClaims())
            {
                return(BadRequest("The request was authorized, but this API only accepts unauthorized requests"));
            }

            try
            {
                var clientLanguage = WebHelper.GetClientLanguage(Request);

                var error = entityProvider.CheckSearchParameters(search, clientLanguage);
                if (!string.IsNullOrEmpty(error))
                {
                    return(BadRequest(error));
                }

                var access = GetUserAccess(clientLanguage);

                var res         = entityProvider.Search <SearchRecord>(search, access);
                var errorResult = res as ErrorSearchResult;
                if (errorResult == null)
                {
                    return(Ok(res as SearchResult <SearchRecord>));
                }

                if (errorResult.Error.StatusCode == (int)HttpStatusCode.BadRequest)  // Syntax Error
                {
                    return(BadRequest("The search query had a syntax error or was invalid."));
                }

                return(StatusCode(errorResult.Error?.StatusCode != 0
                    ? (HttpStatusCode)errorResult.Error.StatusCode
                    : HttpStatusCode.InternalServerError));
            }
            catch (BadRequestException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (UnknownElasticSearchFieldException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                Log.Error(ex, "ExternalController: Exception on processing request Search");
                return(InternalServerError());
            }
        }
        public ISearchResult Search([FromBody] SearchParameters search, string language = null)
        {
            ISearchResult result;

            try
            {
                language = language ?? WebHelper.GetClientLanguage(Request);

                var error = entityProvider.CheckSearchParameters(search, language);
                if (!string.IsNullOrEmpty(error))
                {
                    return(new ErrorSearchResult
                    {
                        Error = new ApiError
                        {
                            StatusCode = (int)HttpStatusCode.Forbidden,
                            Message = error,
                            Details = string.Empty
                        }
                    });
                }

                var access = GetUserAccess(language);
                var userId = ControllerHelper.GetCurrentUserId();

                if (usageAnalyzer.GetExceededThreshold(userId, Request) != null)
                {
                    if (string.IsNullOrEmpty(search?.Captcha?.Token))
                    {
                        return(GetCaptchaMissing(language));
                    }

                    if (!SecurityHelper.IsValidCaptcha(search.Captcha, FrontendSettingsViaduc.Instance.GetServerSettings()))
                    {
                        return(GetCaptchaInvalid(language));
                    }

                    usageAnalyzer.Reset(userId, Request);
                }

                result = entityProvider.Search <SearchRecord>(search, access);

                if (result is SearchResult <SearchRecord> searchResult)
                {
                    usageAnalyzer.UpdateUsageStatistic(userId, Request, searchResult.Entities.Items.Count);

                    if (usageAnalyzer.GetExceededThreshold(userId, Request) != null)
                    {
                        return(GetCaptchaMissing(language));
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Search for {searchQuery} failed", JsonConvert.SerializeObject(search, Formatting.Indented));
                result = new ErrorSearchResult
                {
                    Error = new ApiError
                    {
                        StatusCode = (int)HttpStatusCode.InternalServerError,
                        Message    = FrontendSettingsViaduc.Instance.GetTranslation(language, "search.unexpectedSystemError",
                                                                                    "Es ist ein unerwarteter Fehler aufgetreten.")
                    }
                };
            }

            return(result);
        }