protected virtual void SetDefaultQueryOptions(HttpActionExecutedContext actionExecutedContext) { try { if (MaxTop == 0) { var controllingData = WebApiCachingControllingData.Data(); MaxTop = controllingData.MaxTop; MaxExpansionDepth = controllingData.MaxExpansionDepth; } var content = actionExecutedContext?.Response?.Content as ObjectContent; if (content?.Value is HttpError || content?.Value is SingleResult) { // Paging not required. return; } var hasClientPaging = actionExecutedContext?.Request?.RequestUri?.Query?.Contains("$top=") ?? false; if (!hasClientPaging) { // If paging is required and there is no $top sent by client then force the page size specified by merchant. PageSize = MaxTop; } } catch (Exception ex) { ex.Dump(); } }
public override void Uninstall() { WebApiCachingControllingData.Remove(); WebApiCachingUserData.Remove(); _settingService.DeleteSetting <WebApiSettings>(); base.Uninstall(); }
public override void OnAuthorization(HttpActionContext actionContext) { System.Net.Http.Headers.AuthenticationHeaderValue authorizationHeader = actionContext.Request.Headers.Authorization; var result = HmacResult.FailedForUnknownReason; var controllingData = WebApiCachingControllingData.Data(); var dependencyScope = actionContext.Request.GetDependencyScope(); var utcNow = DateTime.UtcNow; Customer customer = null; try { result = IsAuthenticated(actionContext, dependencyScope, controllingData, utcNow, out customer); } catch (Exception exception) { exception.Dump(); } if (result == HmacResult.Success) { // Inform core about the authentication. Note, you cannot use IWorkContext.set_CurrentCustomer here. HttpContext.Current.User = new SmartStorePrincipal(customer, HmacAuthentication.Scheme1); var response = HttpContext.Current.Response; response.AddHeader(WebApiGlobal.Header.AppVersion, SmartStoreVersion.CurrentFullVersion); response.AddHeader(WebApiGlobal.Header.Version, controllingData.Version); response.AddHeader(WebApiGlobal.Header.MaxTop, controllingData.MaxTop.ToString()); response.AddHeader(WebApiGlobal.Header.Date, utcNow.ToString("o")); response.AddHeader(WebApiGlobal.Header.CustomerId, customer.Id.ToString()); response.Cache.SetCacheability(HttpCacheability.NoCache); } else { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); var headers = actionContext.Response.Headers; var authorization = actionContext.Request.Headers.Authorization; // See RFC-2616 var scheme = _hmac.GetWwwAuthenticateScheme(authorization != null ? authorization.Scheme : null); headers.WwwAuthenticate.Add(new AuthenticationHeaderValue(scheme)); headers.Add(WebApiGlobal.Header.AppVersion, SmartStoreVersion.CurrentFullVersion); headers.Add(WebApiGlobal.Header.Version, controllingData.Version); headers.Add(WebApiGlobal.Header.MaxTop, controllingData.MaxTop.ToString()); headers.Add(WebApiGlobal.Header.Date, utcNow.ToString("o")); headers.Add(WebApiGlobal.Header.HmacResultId, ((int)result).ToString()); headers.Add(WebApiGlobal.Header.HmacResultDescription, result.ToString()); if (controllingData.LogUnauthorized) { LogUnauthorized(actionContext, dependencyScope, result, customer); } } }
public override void Install() { _settingService.SaveSetting(new WebApiSettings()); _localizationService.ImportPluginResourcesFromXml(PluginDescriptor); base.Install(); WebApiCachingControllingData.Remove(); WebApiCachingUserData.Remove(); }
private CatalogSearchQuery NormalizeQuery(CatalogSearchQuery query) { var controllingData = WebApiCachingControllingData.Data(); query = query .BuildFacetMap(false) .Slice(query.Skip, Math.Min(query.Take, controllingData.MaxTop)); return(query); }
public override void Uninstall() { WebApiCachingControllingData.Remove(); WebApiCachingUserData.Remove(); _settingService.DeleteSetting <WebApiSettings>(); _permissionService.UninstallPermissions(new WebApiPermissionProvider()); base.Uninstall(); }
public override void OnAuthorization(HttpActionContext actionContext) { var result = HmacResult.FailedForUnknownReason; var cacheControllingData = WebApiCachingControllingData.Data(); var now = DateTime.UtcNow; Customer customer = null; try { result = IsAuthenticated(actionContext, now, cacheControllingData, out customer); } catch (Exception exc) { exc.Dump(); } if (result == HmacResult.Success) { // inform core about the authentication. note you cannot use IWorkContext.set_CurrentCustomer here. HttpContext.Current.User = new cloudCommercePrincipal(customer, HmacAuthentication.Scheme1); var response = HttpContext.Current.Response; response.AddHeader(WebApiGlobal.Header.Version, cacheControllingData.Version); response.AddHeader(WebApiGlobal.Header.MaxTop, WebApiGlobal.MaxTop.ToString()); response.AddHeader(WebApiGlobal.Header.Date, now.ToString("o")); response.AddHeader(WebApiGlobal.Header.CustomerId, customer.Id.ToString()); response.Cache.SetCacheability(HttpCacheability.NoCache); } else { actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); var headers = actionContext.Response.Headers; var scheme = _hmac.GetWwwAuthenticateScheme(actionContext.Request.Headers.Authorization.Scheme); headers.WwwAuthenticate.Add(new AuthenticationHeaderValue(scheme)); // see RFC-2616 headers.Add(WebApiGlobal.Header.Version, cacheControllingData.Version); headers.Add(WebApiGlobal.Header.MaxTop, WebApiGlobal.MaxTop.ToString()); headers.Add(WebApiGlobal.Header.Date, now.ToString("o")); headers.Add(WebApiGlobal.Header.HmacResultId, ((int)result).ToString()); headers.Add(WebApiGlobal.Header.HmacResultDescription, result.ToString()); if (cacheControllingData.LogUnauthorized) { LogUnauthorized(actionContext, result, customer); } } }
public ActionResult SaveGeneralSettings(WebApiConfigModel model) { if (!ModelState.IsValid) { return(Configure()); } model.Copy(_webApiSettings, false); Services.Settings.SaveSetting(_webApiSettings); WebApiCachingControllingData.Remove(); return(Configure()); }
public override void Uninstall() { WebApiCachingControllingData.Remove(); WebApiCachingUserData.Remove(); _settingService.DeleteSetting <WebApiSettings>(); _permissionService.UninstallPermissions(new WebApiPermissionProvider()); _localizationService.DeleteLocaleStringResources(this.PluginDescriptor.ResourceRootKey); _localizationService.DeleteLocaleStringResources("Plugins.FriendlyName.Api.WebApi", false); base.Uninstall(); }
protected virtual bool MissingClientPaging(HttpActionExecutedContext actionExecutedContext) { if (PagingOptional) { return(false); } try { var content = actionExecutedContext.Response.Content as ObjectContent; if (MaxTop == 0) { var controllingData = WebApiCachingControllingData.Data(); MaxTop = controllingData.MaxTop; MaxExpansionDepth = controllingData.MaxExpansionDepth; } if (content != null) { if (content.Value is HttpError) { return(false); } if (content.Value is SingleResult) { return(false); // 'true' would result in a 500 'internal server error' } } var query = actionExecutedContext.Request.RequestUri.Query; var missingClientPaging = query.IsEmpty() || !query.Contains("$top="); if (missingClientPaging) { actionExecutedContext.Response = actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, $"Missing client paging. Please specify odata $top query option. Maximum value is {MaxTop}."); return(true); } } catch (Exception exception) { exception.Dump(); } return(false); }
public async Task <IHttpActionResult> SearchFiles(ODataActionParameters parameters) { MediaSearchResult result = null; await this.ProcessEntityAsync(async() => { var maxTop = WebApiCachingControllingData.Data().MaxTop; var query = parameters.GetValueSafe <MediaSearchQuery>("Query") ?? new MediaSearchQuery { PageSize = maxTop }; query.PageSize = Math.Min(query.PageSize, maxTop); result = await Service.SearchFilesAsync(query, _defaultLoadFlags); }); return(Ok(result.Select(x => Convert(x)).AsQueryable())); }
public override void Install() { _permissionService.InstallPermissions(new WebApiPermissionProvider()); var apiSettings = new WebApiSettings { LogUnauthorized = true, ValidMinutePeriod = WebApiGlobal.DefaultTimePeriodMinutes }; _settingService.SaveSetting <WebApiSettings>(apiSettings); _localizationService.ImportPluginResourcesFromXml(this.PluginDescriptor); base.Install(); WebApiCachingControllingData.Remove(); WebApiCachingUserData.Remove(); }
public ActionResult SaveGeneralSettings(WebApiConfigModel model) { if (!ModelState.IsValid) { return(Configure()); } if (!HasPermission(false)) { return(AccessDeniedPartialView()); } model.Copy(_webApiSettings, false); _commonServices.Settings.SaveSetting(_webApiSettings); WebApiCachingControllingData.Remove(); return(Configure()); }