Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
Marko Milić 2025-05-26 07:14:55 +02:00
commit 1a4d8a01ce
8 changed files with 739 additions and 2 deletions

View File

@ -304,7 +304,7 @@ sandbox_data_import_secret=change_me
payments_enabled=true
## Transaction requests are replacing simple payments starting from 1.4.0
transactionRequests_enabled=true
transactionRequests_enabled=false
transactionRequests_connector=mapped
## Transaction Request Types that are supported on this server. Possible values might include SANDBOX_TAN, COUNTERPARTY, SEPA, FREE_FORM

View File

@ -566,6 +566,8 @@ class Boot extends MdcLoggable {
Menu.i("SDKs") / "sdks",
Menu.i("Debug") / "debug",
Menu.i("debug-basic") / "debug" / "debug-basic",
Menu.i("debug-default-header") / "debug" / "debug-default-header",
Menu.i("debug-default-footer") / "debug" / "debug-default-footer",
Menu.i("debug-localization") / "debug" / "debug-localization",
Menu.i("debug-plain") / "debug" / "debug-plain",
Menu.i("debug-webui") / "debug" / "debug-webui",

View File

@ -0,0 +1,154 @@
import java.io.{File, PrintWriter}
import scala.sys.process._
import java.security.MessageDigest
object CardanoMetadataWriter {
// Function to generate SHA-256 hash of a string
def generateHash(transactionData: String): String = {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(transactionData.getBytes("UTF-8"))
hashBytes.map("%02x".format(_)).mkString
}
// Function to write metadata JSON file
def writeMetadataFile(transactionHash: String, filePath: String): Unit = {
val jsonContent =
s"""
|{
| "674": {
| "transaction_hash": "$transactionHash"
| }
|}
|""".stripMargin
val file = new File(filePath)
val writer = new PrintWriter(file)
writer.write(jsonContent)
writer.close()
println(s"Metadata file written to: $filePath")
}
// Function to submit transaction to Cardano
def submitHashToCardano(transactionHash: String, txIn: String, txOut: String, signingKey: String, network: String): Unit = {
val metadataFilePath = "metadata.json"
// Write metadata to file
writeMetadataFile(transactionHash, metadataFilePath)
// Build transaction
val buildCommand = s"cardano-cli transaction build-raw --tx-in $txIn --tx-out $txOut --metadata-json-file $metadataFilePath --out-file tx.raw"
buildCommand.!
// Sign transaction
val signCommand = s"cardano-cli transaction sign --tx-body-file tx.raw --signing-key-file $signingKey --$network --out-file tx.signed"
signCommand.!
// Submit transaction
val submitCommand = s"cardano-cli transaction submit --tx-file tx.signed --$network"
submitCommand.!
println("Transaction submitted to Cardano blockchain.")
}
// Example Usage
def main(args: Array[String]): Unit = {
val transactionData = "123|100.50|EUR|2025-03-16 12:30:00"
val transactionHash = generateHash(transactionData)
val txIn = "8c293647e5cb51c4d29e57e162a0bb4a0500096560ce6899a4b801f2b69f2813:0" // This is a tx_id:0 ///"YOUR_UTXO_HERE" // Replace with actual UTXO
val txOut = "addr_test1qruvtthh7mndxu2ncykn47tksar9yqr3u97dlkq2h2dhzwnf3d755n99t92kp4rydpzgv7wmx4nx2j0zzz0g802qvadqtczjhn:1234" // "YOUR_RECEIVER_ADDRESS+LOVELACE" // Replace with receiver address and amount
val signingKey = "payment.skey" // Path to your signing key file
val network = "--testnet-magic" // "--testnet-magic 1097911063" // Use --mainnet for mainnet transactions
submitHashToCardano(transactionHash, txIn, txOut, signingKey, network)
}
}
// TODO
// Create second wallet
// Find version of Pre Prod i'm running
// Get CLI for that version
// Use faucet to get funds
/*
import com.bloxbean.cardano.client.account.Account
import com.bloxbean.cardano.client.api.UtxoSupplier
import com.bloxbean.cardano.client.backend.impl.local.LocalNodeBackendService
import com.bloxbean.cardano.client.backend.api.TransactionService
import com.bloxbean.cardano.client.backend.api.UtxoService
import com.bloxbean.cardano.client.backend.model.Utxo
import com.bloxbean.cardano.client.common.model.Network
import com.bloxbean.cardano.client.metadata.cbor.CBORMetadata
import com.bloxbean.cardano.client.transaction.spec.Transaction
import com.bloxbean.cardano.client.api.helper.TransactionBuilder
import java.security.MessageDigest
object CardanoMetadataWriter {
// Function to generate SHA-256 hash
def generateHash(transactionData: String): String = {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(transactionData.getBytes("UTF-8"))
hashBytes.map("%02x".format(_)).mkString
}
// Function to submit metadata transaction
def submitMetadataToCardano(mnemonic: String, transactionData: String): Unit = {
val network = Network.TESTNET // Change to Network.MAINNET for mainnet
// Load Daedalus wallet from mnemonic
val account = new Account(network, mnemonic)
// Generate hash of transaction data
val transactionHash = generateHash(transactionData)
println(s"Generated Hash: $transactionHash")
// Create metadata object
val metadata = new CBORMetadata()
metadata.put("674", Map("transaction_hash" -> transactionHash))
// Initialize local Cardano node backend
val backendService = new LocalNodeBackendService("http://localhost:8080")
val transactionService: TransactionService = backendService.getTransactionService
val utxoService: UtxoService = backendService.getUtxoService
// Get available UTXOs from the wallet
val utxos: java.util.List[Utxo] = utxoService.getUtxos(account.baseAddress, 1, 10).getValue
if (utxos.isEmpty) {
println("No UTXOs found. Please fund your wallet.")
return
}
// Build transaction
val transaction = TransactionBuilder.create()
.account(account)
.metadata(metadata)
.utxos(utxos)
.changeAddress(account.baseAddress)
.network(network)
.build()
// Sign transaction
val signedTransaction: Transaction = account.sign(transaction)
// Submit transaction
val txHash: String = transactionService.submitTransaction(signedTransaction).getValue
println(s"✅ Transaction submitted! TxHash: $txHash")
}
// Main method
def main(args: Array[String]): Unit = {
val mnemonic = "YOUR_12_OR_24_WORD_MNEMONIC_HERE"
val transactionData = "123|100.50|USD|2025-03-16 12:30:00"
submitMetadataToCardano(mnemonic, transactionData)
}
}
*/

View File

@ -31,7 +31,9 @@ Berlin 13359, Germany
<H1>Here are the debugging pages.</H1>
<h3><a href="/debug/debug-plain">debug-plain -- no Liftweb involved. </a></h3>
<h3><a href="/debug/debug-basic">debug-basic -- call LiftWeb code 'surround'.</a></h3>
<h3><a href="/debug/debug-basic">debug-basic (default)-- call LiftWeb default code 'surround'.</a></h3>
<h3><a href="/debug/debug-default-header">debug-default-header -- call LiftWeb default header code 'surround'.</a></h3>
<h3><a href="/debug/debug-default-footer">debug-default-footer -- call LiftWeb default footer code 'surround'.</a></h3>
<h3><a href="/debug/debug-localization">debug-localization -- call Localization 'lift:loc' method.</a></h3>
<h3><a href="/debug/debug-webui">debug-webui -- call webui method 'apiDocumentationLink' method.</a></h3>

View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head><title>Basic Liftweb Suround with default</title></head>
<div id="main" data-lift="surround?with=default-footer;at=content" tabindex="-1">
<h1>I call LiftWeb code surround</h1>
with a <a href="http://www.example.com">link</a>
<h1>Link to static</h1><a href="/static">static image</a>
<h1>Link to SDKs</h1><a href="/sdks">SDKs</a>
</div>
</body>
</html>

View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head><title>Basic Liftweb Suround with default</title></head>
<div id="main" data-lift="surround?with=default-header;at=content" tabindex="-1">
<h1>I call LiftWeb code surround</h1>
with a <a href="http://www.example.com">link</a>
<h1>Link to static</h1><a href="/static">static image</a>
<h1>Link to SDKs</h1><a href="/sdks">SDKs</a>
</div>
</body>
</html>

View File

@ -0,0 +1,275 @@
<!--
Open Bank Project - API
Copyright (C) 2011-2017, TESOBE GmbH.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Email: contact@tesobe.com
TESOBE GmbH.
Osloerstrasse 16/17
Berlin 13359, Germany
This product includes software developed at
TESOBE (http://www.tesobe.com/)
by
Simon Redfern : simon AT tesobe DOT com
Sebastian Henschel: sebastian AT tesobe DOT com
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="Webapp of the Open Bank Project API">
<meta name="keywords" content="OBP, Open Bank Project, API, bank, fintech">
<meta name="author" content="TESOBE">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title data-lift="WebUI.pageTitle">Open Bank Project: </title>
<link href="/media/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link id="favicon_link" rel="favicon icon" data-lift="WebUI.faviconLink" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/media/css/select2.min.css">
<link href="/media/css/toastr.min.css" rel="stylesheet" type="text/css" />
<link href="/media/css/cookies-consent.css" rel="stylesheet">
<link href="/media/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<link id="main_style_sheet" data-lift="WebUI.mainStyleSheet" href="/media/css/website.css?201707241207" rel="stylesheet" type="text/css" />
<link id="override_style_sheet" data-lift="WebUI.overrideStyleSheet" href="" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="/font-awesome/css/all.min.css">
<script src="/media/js/jquery.min.js" type="text/javascript"></script>
<script src="/media/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/media/js/select2.min.js"></script>
<script src="/media/js/toastr.min.js" type="text/javascript"></script>
<script src="/media/js/website.js" type="text/javascript"></script>
<script src="/media/js/cookies-consent.js"></script>
<script src="/media/js/moment-with-locales.min.js"></script>
<script src="/media/js/bootstrap-datetimepicker.min.js"></script>
<script src="/media/js/popper.min.js"></script>
<script type="module" defer src="/media/js/inactivity.js"></script> <!-- The script loads “in the background”, and then runs when the DOM is fully built. -->
</head>
<body id="page_init">
<div id="cookies-consent" data-lift="WebUI.cookieConsent">
<div id="cookies-consent-font"> We use cookies to support session management.</div>
<input id="cookies-consent-button" class="btn btn-default" type="button" value="Accept and close" onclick="removeByIdAndSaveIndicatorCookie('cookies-consent')"/>
</div>
<div id="toast-container" class="toast-top-right" aria-live="assertive" role="alert" aria-atomic="true" aria-relevant="additions removals"></div>
<div class="container">
<!---
<header>
<div id="header-decoration"></div>
<div id="cookie-ipaddress-concurrent-logins" data-lift="WebUI.concurrentLoginsCookiesCheck"></div>
<div id="top-text" data-lift="WebUI.topText"></div>
<table id="table-header" aria-describedby="Home Page Logo">
<tr class="row">
<td>
<th scope="col"></th>
</td>
<td id="td-logo-left-xs">
<div data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="Home Page"><img src="" id="logo-left-xs" align="left" alt="left logo image"></a>
</div>
</td>
<td id="td-logo-right-xs">
<div data-lift="WebUI.headerLogoRight">
<a href="/" aria-label="Home Page"><img src="" id="logo-right-xs" align="right" alt="right logo image"></a>
</div>
</td>
<td></td>
</tr>
</table>
<div id="table-header-script" data-lift="WebUI.headerContentLoader"></div>
<div id="messages-container" data-lift="Msgs"></div>
</header>
-->
<!--
<a class="sr-only sr-only-focusable" href ="#main" id="index-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#register-consumer" id="consumer-registration-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#api_documentation_content" id="introduction-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#authorise" id="logon-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#recover-password" id="lost-password-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#signup" id="sign-up-page">Skip to main content</a>
-->
<!--
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="navitem" data-lift="WebUI.headerLogoLeft">
<a id ="navitem-logo" class="navlink " href="/" ><img src="/media/images/logo.png" alt="homepage logo"></a>
</li>
<li class="navitem">
<a class="navlink api-explorer-link" data-lift="WebUI.apiExplorerLink" href="">
<lift:loc locid="api_explorer">API Explorer</lift:loc>
</a>
</li>
<li data-lift="Nav.item?name=Consumer%20Registration&showEvenIfRestricted=true" class="navitem">
<a id ="get-api-key-link" class="navlink" href="#">Link name. Has class "selected" if it's the current page.</a>
</li>
<li class="navitem">
<a class="navlink" id="sandbox-introduction-link" data-lift="WebUI.sandboxIntroductionLink" href="">
<lift:loc locid="introduction">Introduction</lift:loc>
</a>
</li>
<li class="navitem">
<a class="navlink" id="technical-faqs-anchor" data-lift="WebUI.technicalFaqsAnchor" href="">
<lift:loc locid="support">Support</lift:loc>
</a>
</li>
<li class="navitem" data-lift="WebUI.subscriptionsButton" >
<a class="navlink subscriptions-button" href="">
<lift:loc locid="subscriptions"><div class ="subscriptions-button-text"></div></lift:loc>
</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li data-lift="Nav.item?name=Login" class="navitem">
<p data-lift="WebUI.userIsLoggedIn">
<a href="/user_mgt/sign_up" class="navbar-btn" id ="register-link"><lift:loc locid="register">Register</lift:loc></a><a data-lift="Login.loggedOut" href="#" class="btn btn-danger login"><lift:loc locid="logon">Log on</lift:loc></a>
</p>
</li>
<li class="navitem" data-lift="Login.loggedIn" >
<p class="navbar-btn"><a href="/user-information"><span id="loggedIn-username">username</span></a><a href="#" class="btn btn-default logout">Log off <span id="countdown-timer-span" class="badge text-bg-primary"></span></a></p>
</li>
</ul>
</div>
</div>
</nav>
-->
<!--
<div id="small-screen-navbar">
<button tabindex="0" id="small-nav-collapse" onclick="openNav()" aria-label ="Open Navigation" aria-hidden="false"></button>
<div id="small-nav-logo" data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="HomePage Logo"><img src="" class="logo-responsive-design-mobile" alt ="Home Page Logo"></a>
</div>
<div id="small-nav-log-on-button" data-lift="Nav.item?name=Login">
<a data-lift="Login.loggedOut" href="#" class="btn btn-danger login">Log on</a>
</div>
</div>
<div id="obp-sidebar" class="sidebar">
<div id="small-screen-navbar">
<button tabindex="0" id="small-nav-cross" onclick="closeNav()" aria-hidden="true" aria-label ="Close Navigation"></button>
<div id="small-nav-logo" data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="HomePage Logo"><img src="" class="logo-responsive-design-mobile" alt ="Home Page Logo"></a>
</div>
<div id="small-nav-log-on-button" data-lift="Nav.item?name=Login">
<a data-lift="Login.loggedOut" href="#" class="btn btn-danger login">Log on</a>
</div>
</div>
<ul>
<li>
<div class="navitem">
<a class="navlink api-explorer-link" data-lift="WebUI.apiExplorerLink" href="">API Explorer</a>
</div>
</li>
<li>
<div class="navitem" data-lift="Nav.item?name=Consumer%20Registration&showEvenIfRestricted=true" id="sideba-api-key-div">
<a id ="get-api-key-link" class="navlink" href="#">Link name. Has class "selected" if it's the current page.</a>
</div>
</li>
<li>
<div class="navitem">
<a class="navlink" id="sandbox-introduction-link" data-lift="WebUI.sandboxIntroductionLink" href="">Introduction</a>
</div>
</li>
<li>
<div class="navitem" id="technical-faqs-anchor-nav">
<a class="navlink" id="technical-faqs-anchor" data-lift="WebUI.technicalFaqsAnchor" href="">
<lift:loc locid="support">Support</lift:loc></a>
</div>
</li>
<li>
<div class="navitem" id="register-link-nav">
<a data-lift="WebUI.userIsLoggedIn" href="/user_mgt/sign_up" class="navbar-btn" id ="register-link">Register</a>
<a data-lift="Login.loggedIn" href="#" class="logout">Log off</a></p>
</div>
</li>
</ul>
</div>
-->
<section id="content">
<lift:bind name="content"/>
The main content gets bound here
</section>
<footer>
<div id="footer-div">
<ul>
<li>
<a class="termsAndConditions-link" data-lift="WebUI.termsAndConditions" href="">
<lift:loc locid="terms_conditions">Terms and Conditions</lift:loc></a>
</li>
<li>
<a class="privacy-policy-link" data-lift="WebUI.privacyPolicyLink" href="https://openbankproject.com/privacy-policy">
<lift:loc locid="privacy_policy">Privacy Policy</lift:loc></a>
</li>
<li>
<a id="footer-div-social" href="http://twitter.com/#!/OpenBankProject" data-lift="WebUI.footerSocialLink">Twitter</a>
</li>
<li>
<a href="https://github.com/OpenBankProject/OBP-API/">Github</a>
</li>
<li>
<a class="api-documentation-link" data-lift="WebUI.apiDocumentationLink" href="">
<lift:loc locid="api_documentation">API Documentation</lift:loc></a>
</li>
<li>
<a class="sofi-link" data-lift="WebUI.sofiLink" href="">Sofit</a>
</li>
<li>
<a href="/user_mgt/sign_up?after-signup=link-to-customer" class="navbar-btn" id ="register-link">
<lift:loc locid="register">On Board</lift:loc></a>
</li>
<li>
<a class="api-link" data-lift="WebUI.apiLinkHuman" href="">
<lift:loc locid="api_host">This API Host</lift:loc></a>
</li>
<li>
<a class="commit-id-link" data-lift="WebUI.commitIdLink" href="">
<lift:loc locid="api_host">GitHub commit</lift:loc></a>
</li>
</ul>
<br>
<div class="language-tag" data-lift="WebUI.currentPage">
<span><a href="#">Language</a></span>
<div id="supported-language-list"></div>
</div>
<div id="copyright">
<a href="http://openbankproject.com"><lift:loc locid="open_bank_project_is">Open Bank Project is &copy;2011 - </lift:loc> <span id="copyright-year" data-lift="WebUI.currentYearText">2018</span> </a> <a href="http://tesobe.com"><lift:loc locid="and_commercial_licenses">TESOBE and distributed under the AGPL and commercial licenses. </lift:loc></a>
</div>
</div>
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,264 @@
<!--
Open Bank Project - API
Copyright (C) 2011-2017, TESOBE GmbH.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Email: contact@tesobe.com
TESOBE GmbH.
Osloerstrasse 16/17
Berlin 13359, Germany
This product includes software developed at
TESOBE (http://www.tesobe.com/)
by
Simon Redfern : simon AT tesobe DOT com
Sebastian Henschel: sebastian AT tesobe DOT com
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="Webapp of the Open Bank Project API">
<meta name="keywords" content="OBP, Open Bank Project, API, bank, fintech">
<meta name="author" content="TESOBE">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title data-lift="WebUI.pageTitle">Open Bank Project: </title>
<link href="/media/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link id="favicon_link" rel="favicon icon" data-lift="WebUI.faviconLink" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/media/css/select2.min.css">
<link href="/media/css/toastr.min.css" rel="stylesheet" type="text/css" />
<link href="/media/css/cookies-consent.css" rel="stylesheet">
<link href="/media/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<link id="main_style_sheet" data-lift="WebUI.mainStyleSheet" href="/media/css/website.css?201707241207" rel="stylesheet" type="text/css" />
<link id="override_style_sheet" data-lift="WebUI.overrideStyleSheet" href="" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="/font-awesome/css/all.min.css">
<script src="/media/js/jquery.min.js" type="text/javascript"></script>
<script src="/media/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/media/js/select2.min.js"></script>
<script src="/media/js/toastr.min.js" type="text/javascript"></script>
<script src="/media/js/website.js" type="text/javascript"></script>
<script src="/media/js/cookies-consent.js"></script>
<script src="/media/js/moment-with-locales.min.js"></script>
<script src="/media/js/bootstrap-datetimepicker.min.js"></script>
<script src="/media/js/popper.min.js"></script>
<script type="module" defer src="/media/js/inactivity.js"></script> <!-- The script loads “in the background”, and then runs when the DOM is fully built. -->
</head>
<body id="page_init">
<div id="cookies-consent" data-lift="WebUI.cookieConsent">
<div id="cookies-consent-font"> We use cookies to support session management.</div>
<input id="cookies-consent-button" class="btn btn-default" type="button" value="Accept and close" onclick="removeByIdAndSaveIndicatorCookie('cookies-consent')"/>
</div>
<div id="toast-container" class="toast-top-right" aria-live="assertive" role="alert" aria-atomic="true" aria-relevant="additions removals"></div>
<div class="container">
<header>
<div id="header-decoration"></div>
<div id="cookie-ipaddress-concurrent-logins" data-lift="WebUI.concurrentLoginsCookiesCheck"></div>
<div id="top-text" data-lift="WebUI.topText"></div>
<table id="table-header" aria-describedby="Home Page Logo">
<tr class="row">
<td>
<th scope="col"></th>
</td>
<td id="td-logo-left-xs">
<div data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="Home Page"><img src="" id="logo-left-xs" align="left" alt="left logo image"></a>
</div>
</td>
<td id="td-logo-right-xs">
<div data-lift="WebUI.headerLogoRight">
<a href="/" aria-label="Home Page"><img src="" id="logo-right-xs" align="right" alt="right logo image"></a>
</div>
</td>
<td></td>
</tr>
</table>
<div id="table-header-script" data-lift="WebUI.headerContentLoader"></div>
<div id="messages-container" data-lift="Msgs"></div>
</header>
<a class="sr-only sr-only-focusable" href ="#main" id="index-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#register-consumer" id="consumer-registration-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#api_documentation_content" id="introduction-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#authorise" id="logon-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#recover-password" id="lost-password-page">Skip to main content</a>
<a class="sr-only sr-only-focusable" href ="#signup" id="sign-up-page">Skip to main content</a>
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<!-- <div class="navbar-header">-->
<!-- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">-->
<!-- <span class="sr-only">Toggle navigation</span>-->
<!-- <span class="icon-bar"></span>-->
<!-- <span class="icon-bar"></span>-->
<!-- <span class="icon-bar"></span>-->
<!-- </button>-->
<!-- </div>-->
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="navitem" data-lift="WebUI.headerLogoLeft">
<a id ="navitem-logo" class="navlink " href="/" ><img src="/media/images/logo.png" alt="homepage logo"></a>
</li>
<li class="navitem">
<a class="navlink api-explorer-link" data-lift="WebUI.apiExplorerLink" href="">
<lift:loc locid="api_explorer">API Explorer</lift:loc>
</a>
</li>
<li data-lift="Nav.item?name=Consumer%20Registration&showEvenIfRestricted=true" class="navitem">
<a id ="get-api-key-link" class="navlink" href="#">Link name. Has class "selected" if it's the current page.</a>
</li>
<li class="navitem">
<a class="navlink" id="sandbox-introduction-link" data-lift="WebUI.sandboxIntroductionLink" href="">
<lift:loc locid="introduction">Introduction</lift:loc>
</a>
</li>
<li class="navitem">
<a class="navlink" id="technical-faqs-anchor" data-lift="WebUI.technicalFaqsAnchor" href="">
<lift:loc locid="support">Support</lift:loc>
</a>
</li>
<li class="navitem" data-lift="WebUI.subscriptionsButton" >
<a class="navlink subscriptions-button" href="">
<lift:loc locid="subscriptions"><div class ="subscriptions-button-text"></div></lift:loc>
</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<!-- login state -->
<li data-lift="Nav.item?name=Login" class="navitem">
<!-- LOGGED OUT -->
<p data-lift="WebUI.userIsLoggedIn">
<a href="/user_mgt/sign_up" class="navbar-btn" id ="register-link"><lift:loc locid="register">Register</lift:loc></a><a data-lift="Login.loggedOut" href="#" class="btn btn-danger login"><lift:loc locid="logon">Log on</lift:loc></a>
</p>
</li>
<li class="navitem" data-lift="Login.loggedIn" >
<!-- LOGGED IN -->
<p class="navbar-btn"><a href="/user-information"><span id="loggedIn-username">username</span></a><a href="#" class="btn btn-default logout">Log off <span id="countdown-timer-span" class="badge text-bg-primary"></span></a></p>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div id="small-screen-navbar">
<button tabindex="0" id="small-nav-collapse" onclick="openNav()" aria-label ="Open Navigation" aria-hidden="false"></button>
<div id="small-nav-logo" data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="HomePage Logo"><img src="" class="logo-responsive-design-mobile" alt ="Home Page Logo"></a>
</div>
<div id="small-nav-log-on-button" data-lift="Nav.item?name=Login">
<a data-lift="Login.loggedOut" href="#" class="btn btn-danger login">Log on</a>
</div>
</div>
<div id="obp-sidebar" class="sidebar">
<div id="small-screen-navbar">
<button tabindex="0" id="small-nav-cross" onclick="closeNav()" aria-hidden="true" aria-label ="Close Navigation"></button>
<div id="small-nav-logo" data-lift="WebUI.headerLogoLeft">
<a href="/" aria-label="HomePage Logo"><img src="" class="logo-responsive-design-mobile" alt ="Home Page Logo"></a>
</div>
<div id="small-nav-log-on-button" data-lift="Nav.item?name=Login">
<a data-lift="Login.loggedOut" href="#" class="btn btn-danger login">Log on</a>
</div>
</div>
<ul>
<li>
<div class="navitem">
<a class="navlink api-explorer-link" data-lift="WebUI.apiExplorerLink" href="">API Explorer</a>
</div>
</li>
<li>
<div class="navitem" data-lift="Nav.item?name=Consumer%20Registration&showEvenIfRestricted=true" id="sideba-api-key-div">
<a id ="get-api-key-link" class="navlink" href="#">Link name. Has class "selected" if it's the current page.</a>
</div>
</li>
<li>
<div class="navitem">
<a class="navlink" id="sandbox-introduction-link" data-lift="WebUI.sandboxIntroductionLink" href="">Introduction</a>
</div>
</li>
<li>
<div class="navitem" id="technical-faqs-anchor-nav">
<a class="navlink" id="technical-faqs-anchor" data-lift="WebUI.technicalFaqsAnchor" href="">
<lift:loc locid="support">Support</lift:loc></a>
</div>
</li>
<li>
<div class="navitem" id="register-link-nav">
<a data-lift="WebUI.userIsLoggedIn" href="/user_mgt/sign_up" class="navbar-btn" id ="register-link">Register</a>
<a data-lift="Login.loggedIn" href="#" class="logout">Log off</a></p>
</div>
</li>
</ul>
</div>
<section id="content">
<lift:bind name="content"/>
The main content gets bound here
</section>
<!--
<footer>
<div id="footer-div">
<ul>
<li>
<a class="termsAndConditions-link" data-lift="WebUI.termsAndConditions" href="">
<lift:loc locid="terms_conditions">Terms and Conditions</lift:loc></a>
</li>
<li>
<a class="privacy-policy-link" data-lift="WebUI.privacyPolicyLink" href="https://openbankproject.com/privacy-policy">
<lift:loc locid="privacy_policy">Privacy Policy</lift:loc></a>
</li>
<li>
<a id="footer-div-social" href="http://twitter.com/#!/OpenBankProject" data-lift="WebUI.footerSocialLink">Twitter</a>
</li>
<li>
<a href="https://github.com/OpenBankProject/OBP-API/">Github</a>
</li>
<li>
<a class="api-documentation-link" data-lift="WebUI.apiDocumentationLink" href="">
<lift:loc locid="api_documentation">API Documentation</lift:loc></a>
</li>
<li>
<a class="sofi-link" data-lift="WebUI.sofiLink" href="">Sofit</a>
</li>
<li>
<a href="/user_mgt/sign_up?after-signup=link-to-customer" class="navbar-btn" id ="register-link">
<lift:loc locid="register">On Board</lift:loc></a>
</li>
<li>
<a class="api-link" data-lift="WebUI.apiLinkHuman" href="">
<lift:loc locid="api_host">This API Host</lift:loc></a>
</li>
<li>
<a class="commit-id-link" data-lift="WebUI.commitIdLink" href="">
<lift:loc locid="api_host">GitHub commit</lift:loc></a>
</li>
</ul>
<br>
<div class="language-tag" data-lift="WebUI.currentPage">
<span><a href="#">Language</a></span>
<div id="supported-language-list"></div>
</div>
<div id="copyright">
<a href="http://openbankproject.com"><lift:loc locid="open_bank_project_is">Open Bank Project is &copy;2011 - </lift:loc> <span id="copyright-year" data-lift="WebUI.currentYearText">2018</span> </a> <a href="http://tesobe.com"><lift:loc locid="and_commercial_licenses">TESOBE and distributed under the AGPL and commercial licenses. </lift:loc></a>
</div>
</div>
</footer>
-->
</div>
</body>
</html>