blob: 0cba5479d8bd6f9a2df0f0beb526848cfe46278d [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package templates
import "html/template"
var SelectCaveats = template.Must(selectCaveats.Parse(headPartial))
var selectCaveats = template.Must(template.New("bless").Parse(`<!doctype html>
<html>
<head>
{{template "head" .}}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<title>Blessings: Select Caveats</title>
<script>
$(document).ready(function() {
$('.caveatInput').hide(); // Hide all the inputs at start.
// When a caveat selector changes show the corresponding input box.
$('body').on('change', '.caveats', function (){
// Grab the div encapsulating the select and the corresponding inputs.
var caveatSelector = $(this).parents(".caveatRow");
// Hide the visible inputs and show the selected one.
caveatSelector.find('.caveatInput').hide();
caveatSelector.find('#'+$(this).val()).show();
});
// Upon clicking the 'Add Caveat' button a new caveat selector should appear.
$('body').on('click', '.addCaveat', function() {
var selector = $(this).parents(".caveatRow");
var newSelector = selector.clone();
// Hide all inputs since nothing is selected in this clone.
newSelector.find('.caveatInput').hide();
selector.after(newSelector);
// Change the '+' button to a 'Remove Caveat' button.
$(this).replaceWith('<button type="button" class="button-passive right removeCaveat">Remove Caveat</button>')
});
// Upon clicking the '-' button caveats should be removed.
$('body').on('click', '.removeCaveat', function() {
$(this).parents('.caveatRow').remove();
});
// Get the timezoneOffset for the server to create a correct expiry caveat.
// The offset is the minutes between UTC and local time.
var d = new Date();
$('#timezoneOffset').val(d.getTimezoneOffset());
// Set the datetime picker to have a default value of one day from now.
var m = moment().add(1, 'd').format("YYYY-MM-DDTHH:MM")
$('#expiry').val(m);
$('#ExpiryCaveat').val(m);
// Activate the cancel button.
$('#cancel').click(function() {
window.close();
});
});
</script>
</head>
<body class="default-layout">
<header>
<nav class="left">
<a href="#" class="logo">Vanadium</a>
</nav>
<nav class="main">
<a href="#">Select Caveats</a>
</nav>
<nav class="right">
<a href="#">{{.Extension}}</a>
</nav>
</header>
<main style="max-width: 80%; margin-left: 10px;">
<form method="POST" id="caveats-form" name="input" action="{{.MacaroonURL}}" role="form">
<h3>{{.Extension}}</h3>
<input type="text" class="hidden" name="macaroon" value="{{.Macaroon}}">
<div class="grid">
<div class="cell">
<label for="blessing-extension">Extension</label>
<input name="blessingExtension" type="text" id="blessing-extension" placeholder="(optional) name of the device/application for which the blessing is being sought, e.g. homelaptop">
<input type="text" class="hidden" id="timezoneOffset" name="timezoneOffset">
</div>
</div>
<div>
<label for="required-caveat">Expiration</label>
<div name="required-caveat">
<div>
<label>
<input type="radio" name="requiredCaveat" id="requiredCaveat" value="Revocation" checked>
When explicitly revoked
</label>
</div>
<div>
<div>
<input type="radio" name="requiredCaveat" id="requiredCaveat" value="Expiry">
<input type="datetime-local" id="expiry" name="expiry">
</div>
</div>
</div>
</div>
<h4>Additional caveats</h4>
<span>Optional additional restrictions on the use of the blessing</span>
<div class="grid caveatRow">
<div class="cell">
<select name="caveat" class="caveats">
<option value="none" selected="selected">Select a caveat.</option>
{{ $caveatList := .CaveatList }}
{{range $index, $name := $caveatList}}
{{if eq $name "ExpiryCaveat"}}
<option name="{{$name}}" value="{{$name}}">Expires</option>
{{else if eq $name "MethodCaveat"}}
<option name="{{$name}}" value="{{$name}}">Allowed Methods</option>
{{else if eq $name "PeerBlessingsCaveat"}}
<option name="{{$name}}" value="{{$name}}">Allowed Peers</option>
{{else}}
<option name="{{$name}}" value="{{$name}}">{{$name}}</option>
{{end}}
{{end}}
</select>
{{range $index, $name := $caveatList}}
{{if eq $name "ExpiryCaveat"}}
<input type="datetime-local" class="caveatInput" id="{{$name}}" name="{{$name}}">
{{else if eq $name "MethodCaveat"}}
<input type="text" id="{{$name}}" class="caveatInput" name="{{$name}}" placeholder="comma-separated method list">
{{else if eq $name "PeerBlessingsCaveat"}}
<input type="text" id="{{$name}}" class="form-control caveatInput" name="{{$name}}" placeholder="comma-separated blessing-pattern list">
{{end}}
{{end}}
<button type="button" class="button-passive right addCaveat">Add Caveat</button>
</div>
</div>
<br/>
<div>
The blessing name will be visible to any peers that this blessing is shared
with. Thus, if your email address is in the blessing name, it will be visible
to peers you share the blessing with.
</div>
<br>
<div>
By clicking "Bless", you consent to be bound by Google's general <a href="https://www.google.com/intl/en/policies/terms/">Terms of Service</a>
and Google's general <a href="https://www.google.com/intl/en/policies/privacy/">Privacy Policy</a>.
</div>
<div class="grid">
<button class="cell button-passive" type="submit">Bless</button>
<button class="cell button-passive" id="cancel">Cancel</button>
<div class="cell"></div>
<div class="cell"></div>
</div>
</form>
</main>
</body>
</html>`))