Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(sipi): Don't expect API v1 status code (DSP-1114) #1763

Merged
merged 14 commits into from Dec 4, 2020
3 changes: 0 additions & 3 deletions sipi/config/BUILD.bazel
Expand Up @@ -3,9 +3,6 @@ package(default_visibility = ["//visibility:public"])
filegroup(
name = "config",
srcs = [
"sipi.init-knora.lua",
"sipi.init-knora-no-auth.lua",
"sipi.init-knora-test.lua",
"sipi.knora-docker-config.lua",
"sipi.knora-docker-no-auth-config.lua",
"sipi.knora-docker-test-config.lua",
Expand Down
2 changes: 1 addition & 1 deletion sipi/config/sipi.knora-docker-config.lua
Expand Up @@ -82,7 +82,7 @@ sipi = {
--
-- Lua script which is executed on initialization of the Lua interpreter
--
initscript = '/sipi/config/sipi.init-knora.lua',
initscript = '/sipi/scripts/sipi.init-knora.lua',

--
-- path to the caching directory
Expand Down
2 changes: 1 addition & 1 deletion sipi/config/sipi.knora-docker-no-auth-config.lua
Expand Up @@ -63,7 +63,7 @@ sipi = {
--
-- Lua script which is executed on initialization of the Lua interpreter
--
initscript = '/sipi/config/sipi.init-knora-no-auth.lua',
initscript = '/sipi/scripts/sipi.init-knora-no-auth.lua',

--
-- path to the caching directory
Expand Down
2 changes: 1 addition & 1 deletion sipi/config/sipi.knora-docker-test-config.lua
Expand Up @@ -82,7 +82,7 @@ sipi = {
--
-- Lua script which is executed on initialization of the Lua interpreter
--
initscript = './config/sipi.init-knora-test.lua',
initscript = './scripts/sipi.init-knora-test.lua',

--
-- path to the caching directory
Expand Down
2 changes: 1 addition & 1 deletion sipi/config/sipi.knora-local-config.lua
Expand Up @@ -82,7 +82,7 @@ sipi = {
--
-- Lua script which is executed on initialization of the Lua interpreter
--
initscript = './config/sipi.init-knora.lua',
initscript = './scripts/sipi.init-knora.lua',

--
-- path to the caching directory
Expand Down
Expand Up @@ -34,6 +34,7 @@ require "get_knora_session"
-- filepath: server-path where the master file is located
-------------------------------------------------------------------------------
function pre_flight(prefix,identifier,cookie)
server.log("pre_flight called in sipi.init-knora-no-auth.lua", server.loglevel.LOG_DEBUG)

--
-- Allways allows access to images. No authorization from Knora is retrieved
Expand Down
Expand Up @@ -34,6 +34,8 @@ require "get_knora_session"
-- filepath: server-path where the master file is located
-------------------------------------------------------------------------------
function pre_flight(prefix,identifier,cookie)
server.log("pre_flight called in sipi.init-knora-test.lua", server.loglevel.LOG_DEBUG)


--
-- For Knora Sipi integration testing
Expand Down Expand Up @@ -98,14 +100,8 @@ function pre_flight(prefix,identifier,cookie)
return 'deny'
end

server.log("pre_flight - status: " .. response_json.status, server.loglevel.LOG_DEBUG)
server.log("pre_flight - permission code: " .. response_json.permissionCode, server.loglevel.LOG_DEBUG)

if response_json.status ~= 0 then
-- something went wrong with the request, Knora returned a non zero status
return 'deny'
end

if response_json.permissionCode == 0 then
-- no view permission on file
return 'deny'
Expand All @@ -114,11 +110,20 @@ function pre_flight(prefix,identifier,cookie)
-- either watermark or size (depends on project, should be returned with permission code by Sipi responder)
-- currently, only size is used

server.log("pre_flight - restricted view settings - size: " .. tostring(response_json.restrictedViewSettings.size), server.loglevel.LOG_DEBUG)
server.log("pre_flight - restricted view settings - watermark: " .. tostring(response_json.restrictedViewSettings.watermark), server.loglevel.LOG_DEBUG)
local restrictedViewSize

local restrictedViewSize = response_json.restrictedViewSettings.size
if restrictedViewSize == nil then
if response_json.restrictedViewSettings ~= nil then
-- server.log("pre_flight - restricted view settings - watermark: " .. tostring(response_json.restrictedViewSettings.watermark), server.loglevel.LOG_DEBUG)

if response_json.restrictedViewSettings.size ~= nil then
server.log("pre_flight - restricted view settings - size: " .. tostring(response_json.restrictedViewSettings.size), server.loglevel.LOG_DEBUG)
restrictedViewSize = response_json.restrictedViewSettings.size
else
server.log("pre_flight - using default restricted view size", server.loglevel.LOG_DEBUG)
restrictedViewSize = config.thumb_size
end
else
server.log("pre_flight - using default restricted view size", server.loglevel.LOG_DEBUG)
restrictedViewSize = config.thumb_size
end

Expand Down
Expand Up @@ -34,6 +34,7 @@ require "get_knora_session"
-- filepath: server-path where the master file is located
-------------------------------------------------------------------------------
function pre_flight(prefix, identifier, cookie)
server.log("pre_flight called in sipi.init-knora.lua", server.loglevel.LOG_DEBUG)

if config.prefix_as_path then
filepath = config.imgroot .. '/' .. prefix .. '/' .. identifier
Expand Down Expand Up @@ -115,14 +116,8 @@ function pre_flight(prefix, identifier, cookie)
return 'deny'
end

server.log("pre_flight - status: " .. response_json.status, server.loglevel.LOG_DEBUG)
server.log("pre_flight - permission code: " .. response_json.permissionCode, server.loglevel.LOG_DEBUG)

if response_json.status ~= 0 then
-- something went wrong with the request, Knora returned a non zero status
return 'deny'
end

if response_json.permissionCode == 0 then
-- no view permission on file
return 'deny'
Expand All @@ -131,11 +126,20 @@ function pre_flight(prefix, identifier, cookie)
-- either watermark or size (depends on project, should be returned with permission code by Sipi responder)
-- currently, only size is used

server.log("pre_flight - restricted view settings - size: " .. tostring(response_json.restrictedViewSettings.size), server.loglevel.LOG_DEBUG)
server.log("pre_flight - restricted view settings - watermark: " .. tostring(response_json.restrictedViewSettings.watermark), server.loglevel.LOG_DEBUG)
local restrictedViewSize

local restrictedViewSize = response_json.restrictedViewSettings.size
if restrictedViewSize == nil then
if response_json.restrictedViewSettings ~= nil then
-- server.log("pre_flight - restricted view settings - watermark: " .. tostring(response_json.restrictedViewSettings.watermark), server.loglevel.LOG_DEBUG)

if response_json.restrictedViewSettings.size ~= nil then
server.log("pre_flight - restricted view settings - size: " .. tostring(response_json.restrictedViewSettings.size), server.loglevel.LOG_DEBUG)
restrictedViewSize = response_json.restrictedViewSettings.size
else
server.log("pre_flight - using default restricted view size", server.loglevel.LOG_DEBUG)
restrictedViewSize = config.thumb_size
end
else
server.log("pre_flight - using default restricted view size", server.loglevel.LOG_DEBUG)
restrictedViewSize = config.thumb_size
end

Expand Down
13 changes: 8 additions & 5 deletions webapi/src/it/scala/org/knora/webapi/TestContainers.scala
Expand Up @@ -19,6 +19,7 @@

package org.knora.webapi

import java.net.InetAddress
import com.typesafe.config.{Config, ConfigFactory}
import org.testcontainers.containers.{BindMode, GenericContainer}

Expand All @@ -27,6 +28,10 @@ import org.testcontainers.containers.{BindMode, GenericContainer}
*/
object TestContainers {

// get local IP address, which we need for SIPI
val localhost: InetAddress = InetAddress.getLocalHost
val localIpAddress: String = localhost.getHostAddress
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be your machine's IP. Could you maybe run it in debug mode and see what you get here?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's a static initialiser bug: if so, these vals need to be lazy because otherwise they might not be initialised before they're needed. Will confirm after lunch.


val FusekiContainer = new GenericContainer("bazel/docker/knora-jena-fuseki:image")
FusekiContainer.withExposedPorts(3030)
FusekiContainer.withEnv("ADMIN_PASSWORD", "test")
Expand All @@ -35,14 +40,12 @@ object TestContainers {

val SipiContainer = new GenericContainer("bazel/docker/knora-sipi:image")
SipiContainer.withExposedPorts(1024)
SipiContainer.withEnv("SIPI_WEBAPI_HOSTNAME", "api")
SipiContainer.withEnv("SIPI_WEBAPI_HOSTNAME", localIpAddress)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here your machine's IP should be used to configure Sipi.

SipiContainer.withEnv("SIPI_WEBAPI_PORT", "3333")
SipiContainer.withCommand("--config=/sipi/config/sipi.knora-docker-config.lua")
SipiContainer.withClasspathResourceMapping("/sipi/config/sipi.knora-docker-config.lua",
SipiContainer.withClasspathResourceMapping(
"/sipi/config/sipi.knora-docker-config.lua",
"/sipi/config/sipi.knora-docker-config.lua",
BindMode.READ_ONLY)
SipiContainer.withClasspathResourceMapping("/sipi/config/sipi.knora-docker-config.lua",
"/sipi/config/sipi.init-knora.lua",
BindMode.READ_ONLY)
SipiContainer.start()

Expand Down
Expand Up @@ -54,7 +54,7 @@ object KnoraSipiIntegrationV2ITSpec {
class KnoraSipiIntegrationV2ITSpec extends ITKnoraLiveSpec(KnoraSipiIntegrationV2ITSpec.config) with AuthenticationV2JsonProtocol with TriplestoreJsonProtocol {
private implicit val stringFormatter: StringFormatter = StringFormatter.getGeneralInstance

private val anythingUserEmail = SharedTestDataADM.anythingUser1.email
private val anythingUserEmail = SharedTestDataADM.anythingAdminUser.email
private val incunabulaUserEmail = SharedTestDataADM.incunabulaMemberUser.email
private val password = SharedTestDataADM.testPass

Expand Down Expand Up @@ -397,7 +397,8 @@ class KnoraSipiIntegrationV2ITSpec extends ITKnoraLiveSpec(KnoraSipiIntegrationV
| "knora-api:hasStillImageFileValue" : {
| "@id" : "${stillImageFileValueIri.get}",
| "@type" : "knora-api:StillImageFileValue",
| "knora-api:fileValueHasFilename" : "${uploadedFile.internalFilename}"
| "knora-api:fileValueHasFilename" : "${uploadedFile.internalFilename}",
| "knora-api:hasPermissions" : "CR knora-admin:Creator|V knora-admin:UnknownUser"
| },
| "@context" : {
| "knora-api" : "http://api.knora.org/ontology/knora-api/v2#",
Expand Down Expand Up @@ -430,7 +431,7 @@ class KnoraSipiIntegrationV2ITSpec extends ITKnoraLiveSpec(KnoraSipiIntegrationV
val sipiGetImageRequest = Get(savedImage.iiifUrl)
checkResponseOK(sipiGetImageRequest)
}

/*
"delete the temporary file if Knora rejects the request to create a file value" in {
// Upload the image to Sipi.
val sipiUploadResponse: SipiUploadResponse = uploadToSipi(
Expand Down Expand Up @@ -846,6 +847,6 @@ class KnoraSipiIntegrationV2ITSpec extends ITKnoraLiveSpec(KnoraSipiIntegrationV

val savedTextFile: SavedTextFile = savedValueToSavedTextFile(savedValue)
assert(savedTextFile.internalFilename == uploadedFile.internalFilename)
}
}*/
}
}
Expand Up @@ -45,7 +45,7 @@ case class SipiFileInfoGetRequestADM(projectID: String,
requestingUser: UserADM) extends SipiResponderRequestADM

/**
* Represents the Knora API v1 JSON response to a request for a information about a `FileValue`.
* Represents the JSON response to a request for a information about a `FileValue`.
*
* @param permissionCode a code representing the user's maximum permission on the file.
* @param restrictedViewSettings the project's restricted view settings.
Expand Down
Expand Up @@ -112,6 +112,8 @@ class SipiResponderADM(responderData: ResponderData) extends Responder(responder

case _ => FastFuture.successful(SipiFileInfoGetResponseADM(permissionCode = permissionCode, restrictedViewSettings = None))
}

_ = println(s"SipiResponderADM returning permission code $permissionCode")
} yield response
}
}
Expand Up @@ -49,6 +49,7 @@ class SipiRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with
)
projectID = stringFormatter.validateProjectShortcode(projectIDAndFile.head, throw BadRequestException(s"Invalid project ID: '${projectIDAndFile.head}'"))
filename = stringFormatter.toSparqlEncodedString(projectIDAndFile(1), throw BadRequestException(s"Invalid filename: '${projectIDAndFile(1)}'"))
_ = println(s"/admin/files route called for filename $filename")
} yield SipiFileInfoGetRequestADM(
projectID = projectID,
filename = filename,
Expand Down
14 changes: 9 additions & 5 deletions webapi/src/test/scala/org/knora/webapi/TestContainers.scala
Expand Up @@ -19,6 +19,8 @@

package org.knora.webapi

import java.net.InetAddress

import com.typesafe.config.{Config, ConfigFactory}
import org.testcontainers.containers.{BindMode, GenericContainer}

Expand All @@ -27,6 +29,10 @@ import org.testcontainers.containers.{BindMode, GenericContainer}
*/
object TestContainers {

// get local IP address, which we need for SIPI
val localhost: InetAddress = InetAddress.getLocalHost
val localIpAddress: String = localhost.getHostAddress

val FusekiContainer = new GenericContainer("bazel/docker/knora-jena-fuseki:image")
FusekiContainer.withExposedPorts(3030)
FusekiContainer.withEnv("ADMIN_PASSWORD", "test")
Expand All @@ -38,14 +44,12 @@ object TestContainers {
SipiContainer.withEnv("SIPI_EXTERNAL_PROTOCOL", "http")
SipiContainer.withEnv("SIPI_EXTERNAL_HOSTNAME", "sipi")
SipiContainer.withEnv("SIPI_EXTERNAL_PORT", "1024")
SipiContainer.withEnv("SIPI_WEBAPI_HOSTNAME", "api")
SipiContainer.withEnv("SIPI_WEBAPI_HOSTNAME", localIpAddress)
SipiContainer.withEnv("SIPI_WEBAPI_PORT", "3333")
SipiContainer.withCommand("--config=/sipi/config/sipi.knora-docker-config.lua")
SipiContainer.withClasspathResourceMapping("/sipi/config/sipi.knora-docker-config.lua",
SipiContainer.withClasspathResourceMapping(
"/sipi/config/sipi.knora-docker-config.lua",
"/sipi/config/sipi.knora-docker-config.lua",
BindMode.READ_ONLY)
SipiContainer.withClasspathResourceMapping("/sipi/config/sipi.knora-docker-config.lua",
"/sipi/config/sipi.init-knora.lua",
BindMode.READ_ONLY)
SipiContainer.start()

Expand Down