diff --git a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala index 3baabaf09..f5336ca24 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala @@ -1,7 +1,7 @@ package code.api.v5_1_0 -import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.{apiCollectionJson400, apiCollectionsJson400, postApiCollectionJson400, revokedConsentJsonV310} +import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.{apiCollectionJson400, apiCollectionsJson400, apiInfoJson400, postApiCollectionJson400, revokedConsentJsonV310} import code.api.util.APIUtil._ import code.api.util.ApiRole._ import code.api.util.ApiTag._ @@ -16,7 +16,7 @@ import code.util.Helper import com.github.dwickern.macros.NameOf.nameOf import com.openbankproject.commons.ExecutionContext.Implicits.global import com.openbankproject.commons.model.BankId -import com.openbankproject.commons.util.ApiVersion +import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion} import net.liftweb.common.Full import net.liftweb.http.rest.RestHelper @@ -32,7 +32,7 @@ trait APIMethods510 { class Implementations510 { - val implementedInApiVersion = ApiVersion.v5_1_0 + val implementedInApiVersion: ScannedApiVersion = ApiVersion.v5_1_0 private val staticResourceDocs = ArrayBuffer[ResourceDoc]() def resourceDocs = staticResourceDocs @@ -41,6 +41,34 @@ trait APIMethods510 { val codeContext = CodeContext(staticResourceDocs, apiRelations) + + staticResourceDocs += ResourceDoc( + root, + implementedInApiVersion, + "root", + "GET", + "/root", + "Get API Info (root)", + """Returns information about: + | + |* API version + |* Hosted by information + |* Hosted at information + |* Energy source information + |* Git Commit""", + EmptyBody, + apiInfoJson400, + List(UnknownError, "no connector set"), + apiTagApi :: apiTagNewStyle :: Nil) + + lazy val root : OBPEndpoint = { + case (Nil | "root" :: Nil) JsonGet _ => { + cc => Future { + JSONFactory510.getApiInfoJSON(implementedInApiVersion) -> HttpCode.`200`(cc.callContext) + } + } + } + staticResourceDocs += ResourceDoc( getAllApiCollections, implementedInApiVersion, diff --git a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala index e90c13a75..1b3284b30 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala @@ -26,8 +26,61 @@ */ package code.api.v5_1_0 +import code.api.Constant +import code.api.util.APIUtil +import code.api.util.APIUtil.gitCommit +import code.api.v4_0_0.{EnergySource400, HostedAt400, HostedBy400} +import com.openbankproject.commons.util.ScannedApiVersion + + +case class APIInfoJsonV510( + version : String, + version_status: String, + git_commit : String, + stage : String, + connector : String, + hostname : String, + local_identity_provider : String, + hosted_by : HostedBy400, + hosted_at : HostedAt400, + energy_source : EnergySource400, + resource_docs_requires_role: Boolean + ) object JSONFactory510 { + def getApiInfoJSON(implementedInApiVersion: ScannedApiVersion) = { + val (apiVersion, apiVersionStatus) = (implementedInApiVersion, OBPAPI5_1_0.versionStatus) + val organisation = APIUtil.getPropsValue("hosted_by.organisation", "TESOBE") + val email = APIUtil.getPropsValue("hosted_by.email", "contact@tesobe.com") + val phone = APIUtil.getPropsValue("hosted_by.phone", "+49 (0)30 8145 3994") + val organisationWebsite = APIUtil.getPropsValue("organisation_website", "https://www.tesobe.com") + val hostedBy = new HostedBy400(organisation, email, phone, organisationWebsite) + + val organisationHostedAt = APIUtil.getPropsValue("hosted_at.organisation", "") + val organisationWebsiteHostedAt = APIUtil.getPropsValue("hosted_at.organisation_website", "") + val hostedAt = HostedAt400(organisationHostedAt, organisationWebsiteHostedAt) + + val organisationEnergySource = APIUtil.getPropsValue("energy_source.organisation", "") + val organisationWebsiteEnergySource = APIUtil.getPropsValue("energy_source.organisation_website", "") + val energySource = EnergySource400(organisationEnergySource, organisationWebsiteEnergySource) + + val connector = APIUtil.getPropsValue("connector").openOrThrowException("no connector set") + val resourceDocsRequiresRole = APIUtil.getPropsAsBoolValue("resource_docs_requires_role", false) + + APIInfoJsonV510( + version = apiVersion.vDottedApiVersion, + version_status = apiVersionStatus, + git_commit = gitCommit, + connector = connector, + hostname = Constant.HostName, + stage = System.getProperty("run.mode"), + local_identity_provider = Constant.localIdentityProvider, + hosted_by = hostedBy, + hosted_at = hostedAt, + energy_source = energySource, + resource_docs_requires_role = resourceDocsRequiresRole + ) + } }