Skip to content
Snippets Groups Projects
Commit ff9918d7 authored by Benedikt Heinrichs's avatar Benedikt Heinrichs Committed by Marcel Nellesen
Browse files

Fix: fixed prefix and handle (coscine/issues#953)

parent d6792c83
No related branches found
No related tags found
No related merge requests found
......@@ -29,7 +29,7 @@ namespace Coscine.Api.Tree.Controllers
{
private readonly Authenticator _authenticator;
private readonly ResourceModel _resourceModel;
private readonly Util _util;
private readonly RdfStoreConnector _rdfStoreConnector;
private readonly ProjectRoleModel _projectRoleModel;
private readonly ProjectResourceModel _projectResourceModel;
private readonly CoscineLogger _coscineLogger;
......@@ -37,12 +37,13 @@ namespace Coscine.Api.Tree.Controllers
private readonly IDataSourceService _dataSourceService;
private readonly WaterbutlerInterface _waterbutlerInterface;
private readonly string _blobApiLink;
private readonly string _prefix;
public TreeController(ILogger<TreeController> logger, IDataSourceService dataSourceService)
{
_authenticator = new Authenticator(this, Program.Configuration);
_resourceModel = new ResourceModel();
_util = new Util(Program.Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url"));
_rdfStoreConnector = new RdfStoreConnector(Program.Configuration.GetStringAndWait("coscine/local/virtuoso/additional/url"));
_projectRoleModel = new ProjectRoleModel();
_projectResourceModel = new ProjectResourceModel();
......@@ -55,16 +56,23 @@ namespace Coscine.Api.Tree.Controllers
var host = rule.Substring("Host:".Length, rule.IndexOf(";") - "Host:".Length);
var path = rule.Substring(rule.IndexOf("/"));
_blobApiLink = $"https://{host}{path}/blob/";
_prefix = Program.Configuration.GetStringAndWait("coscine/global/epic/prefix");
}
public Uri GenerateId(string resourceId, string path)
{
return new Uri($"https://purl.org/coscine/md/{resourceId}/{path}/".ToLower());
return new Uri($"https://hdl.handle.net/{_prefix}/{resourceId}@path={Uri.EscapeDataString(path)}");
}
[HttpGet("[controller]/{resourceId}/{path}")]
[HttpGet("[controller]/{resourceId}/{*path}")]
public async Task<IActionResult> GetMetadata(string resourceId, string path)
{
path = $"/{path}";
if (path.Contains("%2F") || path.Contains("%2f"))
{
return BadRequest("Path can not contain the sequence %2F.");
}
var user = _authenticator.GetUser();
var check = CheckResourceIdAndPath(resourceId, path, out Resource resource);
......@@ -98,10 +106,10 @@ namespace Coscine.Api.Tree.Controllers
foreach (var info in infos)
{
var id = GenerateId(resourceId, Uri.EscapeDataString(info.Path));
if (_util.HasGraph(id))
var id = GenerateId(resourceId, info.Path);
if (_rdfStoreConnector.HasGraph(id.AbsoluteUri))
{
var graph = _util.GetGraph(id);
var graph = _rdfStoreConnector.GetGraph(id);
graphs.Add(JToken.Parse(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter())));
}
}
......@@ -117,15 +125,21 @@ namespace Coscine.Api.Tree.Controllers
return Json(jObject);
}
[HttpPut("[controller]/{resourceId}/{path}")]
[HttpPut("[controller]/{resourceId}/{*path}")]
public IActionResult StoreMetadataForFile(string resourceId, string path)
{
path = $"/{path}";
if (path.Contains("%2F") || path.Contains("%2f"))
{
return BadRequest("Path can not contain the sequence %2F.");
}
var innerBlock = ObjectFactory<JToken>.DeserializeFromStream(Request.Body);
var graphNameUri = GenerateId(resourceId, path);
var json = new JObject
{
[graphNameUri.ToString()] = innerBlock
[graphNameUri.AbsoluteUri] = innerBlock
};
var user = _authenticator.GetUser();
......@@ -140,7 +154,7 @@ namespace Coscine.Api.Tree.Controllers
{
resource.ApplicationProfile += '/';
}
json[graphNameUri.ToString()]["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"] = new JArray
json[graphNameUri.AbsoluteUri]["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"] = new JArray
{
new JObject
{
......@@ -166,7 +180,7 @@ namespace Coscine.Api.Tree.Controllers
var fixedValuesGraph = new Graph();
fixedValuesGraph.LoadFromString(resource.FixedValues, new RdfJsonParser());
var shapesGraph = (Graph)_util.GetGraph(resource.ApplicationProfile);
var shapesGraph = (Graph)_rdfStoreConnector.GetGraph(resource.ApplicationProfile);
foreach (var triple in fixedValuesGraph.Triples.Where(x => x.Predicate.ToString() == "https://purl.org/coscine/fixedValue"))
{
......@@ -201,25 +215,25 @@ namespace Coscine.Api.Tree.Controllers
// Default values is not checked or added
// validate the data
if (!_util.ValidateShacl(graph, graphNameUri))
if (!_rdfStoreConnector.ValidateShacl(graph, graphNameUri))
{
return BadRequest("Data has the wrong format!");
}
// store the data
if (_util.HasGraph(graphNameUri))
if (_rdfStoreConnector.HasGraph(graphNameUri))
{
_util.ClearGraph(graphNameUri);
_rdfStoreConnector.ClearGraph(graphNameUri);
LogAnalytics("Update MD", resourceId, path, user);
}
else
{
_util.CreateNamedGraph(graphNameUri);
_rdfStoreConnector.CreateNamedGraph(graphNameUri);
LogAnalytics("Upload MD", resourceId, path, user);
}
// BaseUri must be set for the sparql query
graph.BaseUri = graphNameUri;
_util.AddGraph(graph);
_rdfStoreConnector.AddGraph(graph);
return NoContent();
......
File deleted
File deleted
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
</targets>
<rules>
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
This diff is collapsed.
......@@ -62,8 +62,8 @@
<Reference Include="Coscine.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e1ed402bc3f6525e, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Logging.1.2.0\lib\net461\Coscine.Logging.dll</HintPath>
</Reference>
<Reference Include="Coscine.Metadata, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Metadata.1.3.0\lib\net461\Coscine.Metadata.dll</HintPath>
<Reference Include="Coscine.Metadata, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Coscine.Metadata.1.3.1\lib\net461\Coscine.Metadata.dll</HintPath>
</Reference>
<Reference Include="dotNetRDF, Version=2.5.1.0, Culture=neutral, PublicKeyToken=6055ffe4c97cc780, processorArchitecture=MSIL">
<HintPath>..\packages\dotNetRDF.2.5.1\lib\net40\dotNetRDF.dll</HintPath>
......@@ -541,73 +541,8 @@
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="LinqToDB.Templates\DataAnnotations.ttinclude" />
<None Include="LinqToDB.Templates\DataModel.ttinclude" />
<None Include="LinqToDB.Templates\EditableObject.ttinclude" />
<None Include="LinqToDB.Templates\Humanizer.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Access.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Access.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.DB2.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.DB2.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Firebird.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Firebird.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Informix.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Informix.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.MySql.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.MySql.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Oracle.Managed.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Oracle.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Oracle.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Oracle.x64.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Oracle.x86.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.PostgreSQL.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.PostgreSQL.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SapHana.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SapHana.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlCe.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlCe.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SQLite.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SQLite.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlServer.SqlTypes.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlServer.SqlTypes.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlServer.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.SqlServer.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Sybase.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Sybase.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.Tools.ttinclude" />
<None Include="LinqToDB.Templates\LinqToDB.ttinclude" />
<None Include="LinqToDB.Templates\MultipleFiles.ttinclude" />
<None Include="LinqToDB.Templates\NotifyDataErrorInfo.ttinclude" />
<None Include="LinqToDB.Templates\NotifyPropertyChanged.ttinclude" />
<None Include="LinqToDB.Templates\ObsoleteAttributes.ttinclude" />
<None Include="LinqToDB.Templates\PluralizationService.ttinclude" />
<None Include="LinqToDB.Templates\README.md" />
<None Include="LinqToDB.Templates\T4Model.ttinclude" />
<None Include="LinqToDB.Templates\Validation.ttinclude" />
<Content Include="Microsoft.DiaSymReader.Native.amd64.dll" />
<Content Include="Microsoft.DiaSymReader.Native.x86.dll" />
<Content Include="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="NLog.xsd">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="LinqToDB.Templates\CopyMe.Access.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.DB2.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.Firebird.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.Informix.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.MySql.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.Oracle.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.PostgreSQL.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.SapHana.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.SqlCe.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.SQLite.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.SqlServer.tt.txt" />
<Content Include="LinqToDB.Templates\CopyMe.Sybase.tt.txt" />
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
......
......@@ -6,7 +6,7 @@
<package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" />
<package id="Coscine.Database" version="1.22.2" targetFramework="net461" />
<package id="Coscine.Logging" version="1.2.0" targetFramework="net461" />
<package id="Coscine.Metadata" version="1.3.0" targetFramework="net461" />
<package id="Coscine.Metadata" version="1.3.1" targetFramework="net461" />
<package id="dotNetRDF" version="2.5.1" targetFramework="net461" />
<package id="dotNetRDF.Data.Virtuoso" version="2.5.1" targetFramework="net461" />
<package id="EntityFramework" version="6.2.0" targetFramework="net461" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment