/// <summary> /// Get the specified request. /// </summary> /// <param name="request">Request.</param> public object Get(DataPackageDescriptionRequest request) { var context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView); try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DataPackageId}}/description GET DataPackageId='{0}'", request.DataPackageId)); Terradue.Tep.DataPackage datapackage; if (request.Key != null) { context.AccessLevel = EntityAccessLevel.Administrator; datapackage = DataPackage.FromIdentifier(context, request.DataPackageId); if (request.Key != null && !request.Key.Equals(datapackage.AccessKey)) { throw new UnauthorizedAccessException(CustomErrorMessages.WRONG_ACCESSKEY); } } else { datapackage = DataPackage.FromIdentifier(context, request.DataPackageId); } datapackage.SetOpenSearchEngine(MasterCatalogue.OpenSearchEngine); OpenSearchDescription osd = datapackage.GetLocalOpenSearchDescription(); context.Close(); return(new HttpResult(osd, "application/opensearchdescription+xml")); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } }
public object Get(DataPackageGetAvailableIdentifierRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.UserView); var available = true; try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DpId}}/available GET DpId='{0}'", request.DpId)); context.AccessLevel = EntityAccessLevel.Administrator; try { DataPackage dp = DataPackage.FromIdentifier(context, request.DpId); available = false; }catch (EntityNotFoundException) { available = true; }catch (Exception) { available = false; } context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(new WebResponseBool(available)); }
/// <summary> /// Get the specified request. /// </summary> /// <param name="request">Request.</param> public object Get(DataPackageGetGroupsRequestTep request) { List <WebGroup> result = new List <WebGroup>(); var context = TepWebContext.GetWebContext(PagePrivileges.AdminOnly); try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DpId}}/group GET DpId='{0}'", request.DpId)); DataPackage dp = DataPackage.FromIdentifier(context, request.DpId); var gids = dp.GetAuthorizedGroupIds(); List <int> ids = gids != null?gids.ToList() : new List <int>(); List <Group> groups = new List <Group>(); foreach (int id in ids) { groups.Add(Group.FromId(context, id)); } foreach (Group grp in groups) { result.Add(new WebGroup(grp)); } context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Put the specified request. /// </summary> /// <param name="request">Request.</param> public object Put(DataPackageUpdateRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.UserView); WebDataPackageTep result; try{ context.Open(); context.LogInfo(this, string.Format("/data/package PUT Id='{0}'", request.Id == 0 ? request.Identifier : request.Id.ToString())); DataPackage tmp; if (request.Id != 0) { tmp = DataPackage.FromId(context, request.Id); } else if (!string.IsNullOrEmpty(request.Identifier)) { tmp = DataPackage.FromIdentifier(context, request.Identifier); } else { throw new Exception("Undefined data package, set at least Id or Identifier"); } if (request.Access != null) { switch (request.Access) { case "public": tmp.GrantPermissionsToAll(); Activity activity = new Activity(context, tmp, EntityOperationType.Share); activity.Store(); break; case "private": tmp.RevokePermissionsFromAll(true, false); break; default: break; } } else { tmp = (DataPackage)request.ToEntity(context, tmp); tmp.Store(); } result = new WebDataPackageTep(tmp); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Post the specified request. /// </summary> /// <param name="request">Request.</param> public object Post(DataPackageCreateRequestTep request) { //Get all requests from database var context = TepWebContext.GetWebContext(PagePrivileges.UserView); WebDataPackageTep result; try{ context.Open(); var identifier = !string.IsNullOrEmpty(request.Identifier) ? TepUtility.ValidateIdentifier(request.Identifier) : TepUtility.ValidateIdentifier(request.Name); DataPackage tmp = new DataPackage(context); tmp = (DataPackage)request.ToEntity(context, tmp); if (request.Overwrite && tmp.OwnerId == context.UserId) { tmp = DataPackage.FromIdentifier(context, identifier); foreach (var res in tmp.Resources) { res.Delete(); } } else { tmp = (DataPackage)request.ToEntity(context, tmp); tmp.Identifier = identifier; try { tmp.Store(); } catch (DuplicateEntityIdentifierException e) { tmp = DataPackage.FromIdentifier(context, identifier); if (tmp.OwnerId == context.UserId) { throw new DuplicateNameException(e.Message); } else { throw e; } } } result = new WebDataPackageTep(tmp); context.LogInfo(this, string.Format("/data/package POST Id='{0}'", tmp.Id)); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Put the specified request. /// </summary> /// <param name="request">Request.</param> public object Put(DataPackageUpdateDefaultRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.UserView); WebDataPackageTep result; try{ context.Open(); context.LogInfo(this, string.Format("/data/package/default PUT")); DataPackage def = DataPackage.GetTemporaryForCurrentUser(context); //we want to do the copy of a datapackage into the default one if (def.Identifier != request.Identifier) { foreach (RemoteResource res in def.Resources) { res.Delete(); } def.LoadItems(); var tmp = DataPackage.FromIdentifier(context, request.Identifier); foreach (RemoteResource res in tmp.Resources) { RemoteResource tmpres = new RemoteResource(context); tmpres.Location = res.Location; def.AddResourceItem(tmpres); } ActivityTep activity = new ActivityTep(context, tmp, EntityOperationType.View); activity.SetParam("items", tmp.Resources.Count + ""); activity.Store(); } else { def = (DataPackage)request.ToEntity(context, def); } result = new WebDataPackageTep(def); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Put the specified request. /// </summary> /// <param name="request">Request.</param> public object Put(DataPackageExportRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.UserView); WebDataPackageTep result; try{ context.Open(); context.LogInfo(this, string.Format("/data/package/export PUT Id='{0}'", request.Id == 0 ? request.Identifier : request.Id.ToString())); DataPackage tmp; if (request.Id != 0) { tmp = DataPackage.FromId(context, request.Id); } else if (!string.IsNullOrEmpty(request.Identifier)) { tmp = DataPackage.FromIdentifier(context, request.Identifier); } else { throw new Exception("Undefined data package, set at least Id or Identifier"); } var serie = new Collection(context); serie.Identifier = tmp.Identifier; serie.Name = tmp.Name; var entityType = EntityType.GetEntityType(typeof(DataPackage)); var description = new UriBuilder(context.BaseUrl + "/" + entityType.Keyword + "/" + tmp.Identifier + "/description"); description.Query = "key=" + tmp.AccessKey; serie.CatalogueDescriptionUrl = description.Uri.AbsoluteUri; var user = UserTep.FromId(context, context.UserId); serie.Domain = user.Domain; serie.Store(); result = new WebDataPackageTep(tmp); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Get the specified request. /// </summary> /// <param name="request">Request.</param> public object Get(GetDataPackageTep request) { //Get all requests from database var context = TepWebContext.GetWebContext(PagePrivileges.UserView); WebDataPackageTep result; try{ context.Open(); context.LogInfo(this, string.Format("/data/package/{{Identifier}} GET Id='{0}", request.Identifier)); DataPackage tmp = DataPackage.FromIdentifier(context, request.Identifier); result = new WebDataPackageTep(tmp); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(result); }
/// <summary> /// Put the specified request. /// </summary> /// <param name="request">Request.</param> public object Put(DataPackageUpdateGroupsRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.AdminOnly); try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DpId}}/group PUT DpId='{0}', Id='{1}'", request.DpId, request.ToArray() != null ? string.Join(",", request.ToArray()) : "null")); DataPackage dp = DataPackage.FromIdentifier(context, request.DpId); string sql = String.Format("DELETE FROM resourceset_perm WHERE id_resourceset={0} AND id_grp IS NOT NULL;", dp.Id); context.Execute(sql); dp.GrantPermissionsToGroups(request.ToArray()); context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(new WebResponseBool(true)); }
/// <summary> /// Delete the specified request. /// </summary> /// <param name="request">Request.</param> public object Delete(DataPackageDeleteRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.UserView); try{ context.Open(); context.LogInfo(this, string.Format("/data/package/{{Identifier}} DELETE Identifier='{0}'", request.Identifier)); DataPackage tmp = DataPackage.FromIdentifier(context, request.Identifier); if (tmp.OwnerId != context.UserId && context.AccessLevel != EntityAccessLevel.Administrator) { throw new UnauthorizedAccessException("You are not authorized to delete this data package."); } tmp.Delete(); context.Close(); }catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(Get(new GetAllDataPackages())); }
/// <summary> /// Post the specified request. /// </summary> /// <param name="request">Request.</param> public object Delete(DataPackageDeleteGroupRequestTep request) { List <WebGroup> result = new List <WebGroup>(); var context = TepWebContext.GetWebContext(PagePrivileges.AdminOnly); try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DpId}}/group DELETE DpId='{0}', Id='{1}'", request.DpId, request.Id)); DataPackage dp = DataPackage.FromIdentifier(context, request.DpId); //TODO: replace once http://project.terradue.com/issues/13954 is resolved string sql = String.Format("DELETE FROM resourceset_perm WHERE id_resourceset={0} AND id_grp={1};", dp.Id, request.Id); context.Execute(sql); context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(new WebResponseBool(true)); }
/// <summary> /// Post the specified request. /// </summary> /// <param name="request">Request.</param> public object Post(DataPackageAddGroupRequestTep request) { var context = TepWebContext.GetWebContext(PagePrivileges.AdminOnly); try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DpId}}/group POST DpId='{0}', Id='{1}'", request.DpId, request.Id)); DataPackage dp = DataPackage.FromIdentifier(context, request.DpId); var gids = dp.GetAuthorizedGroupIds(); List <int> ids = gids != null?gids.ToList() : new List <int>(); List <Group> groups = new List <Group>(); foreach (int id in ids) { groups.Add(Group.FromId(context, id)); } foreach (Group grp in groups) { if (grp.Id == request.Id) { return(new WebResponseBool(false)); } } dp.GrantPermissionsToGroups(new int[] { request.Id }); context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(new WebResponseBool(true)); }
/// <summary> /// Get the specified request. /// </summary> /// <param name="request">Request.</param> public object Get(DataPackageSearchRequest request) { var context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView); IOpenSearchResultCollection result = null; try { context.Open(); context.LogInfo(this, string.Format("/data/package/{{DataPackageId}}/search GET DataPackageId='{0}'", request.DataPackageId)); Terradue.Tep.DataPackage datapackage; try{ datapackage = DataPackage.FromIdentifier(context, request.DataPackageId); }catch (Exception) { if (request.Key != null) //or if public { context.AccessLevel = EntityAccessLevel.Administrator; datapackage = DataPackage.FromIdentifier(context, request.DataPackageId); if (request.Key != null && !request.Key.Equals(datapackage.AccessKey)) { throw new UnauthorizedAccessException(CustomErrorMessages.WRONG_ACCESSKEY); } } else { datapackage = DataPackage.FromIdentifier(context, request.DataPackageId); } } if (Request.QueryString != null && Request.QueryString["cache"] == "false") { datapackage.SetOpenSearchEngine(MasterCatalogue.GetNewOpenSearchEngine()); } else if (Request.QueryString != null && Request.QueryString["clearcache"] == "true") { datapackage.SetOpenSearchEngine(MasterCatalogue.ClearOpenSearchEngine()); } else { datapackage.SetOpenSearchEngine(MasterCatalogue.OpenSearchEngine); } OpenSearchEngine ose = MasterCatalogue.OpenSearchEngine; Type responseType = OpenSearchFactory.ResolveTypeFromRequest(HttpContext.Current.Request.QueryString, HttpContext.Current.Request.Headers, ose); result = ose.Query(datapackage, Request.QueryString, responseType); var openSearchDescription = datapackage.GetLocalOpenSearchDescription(); var uri_s = datapackage.GetSearchBaseUrl(); OpenSearchDescriptionUrl openSearchUrlByRel = OpenSearchFactory.GetOpenSearchUrlByRel(openSearchDescription, "self"); Uri uri_d; if (openSearchUrlByRel != null) { uri_d = new Uri(openSearchUrlByRel.Template); } else { uri_d = openSearchDescription.Originator; } if (uri_d != null) { result.Links.Add(new SyndicationLink(uri_d, "search", "OpenSearch Description link", "application/opensearchdescription+xml", 0)); } if (uri_s != null) { result.Links.Add(new SyndicationLink(uri_s, "self", "OpenSearch Search link", "application/atom+xml", 0)); } MasterCatalogue.ReplaceSelfLinksFormat(result, Request.QueryString); ActivityTep activity = new ActivityTep(context, datapackage, EntityOperationType.Search); activity.SetParam("items", result.TotalResults + ""); activity.Store(); context.Close(); } catch (Exception e) { context.LogError(this, e.Message, e); context.Close(); throw e; } return(new HttpResult(result.SerializeToString(), result.ContentType)); }