feat: more weezard updates

This commit is contained in:
Anton Livaja 2024-10-08 11:01:31 -04:00
parent 5ce36df0ee
commit 082d7effaf
Signed by: anton
GPG Key ID: 44A86CFF1FDF0E85
3 changed files with 279 additions and 150 deletions

View File

@ -29,6 +29,7 @@ header_pages:
- index.md - index.md
- about.md - about.md
- pricing.md - pricing.md
- wizard.md
- recovery_policy.md - recovery_policy.md
- data_storage.md - data_storage.md
- q&a.md - q&a.md

View File

@ -1,29 +1,86 @@
<!DOCTYPE html>
<html lang="{{ page.lang | default: site.lang | default: en }}">
{%- include head.html -%}
<body> <body>
<h1>Weezard</h1> <div class="container">
<label for="policy_valid_upto_date">Is the policy valid up to a date?</label>
{%- include header.html -%}
<h1>Recovery Policy Wizard</h1>
<p>
This wizard will assist you in constructing the set of rules, also
known as the Recovery Policy, which specifies under which conditions
your data can be recovered. The policy has been designed with flexibility
in mind in order to accommodate different use-cases and threat models.
</p>
<div id="wizard-container">
<section>
<h2>Time Based Rules</h2>
<p>
Time based rules allow specifying during which time period the policy is <b>active</b>.
In order to request data recovery, a policy has to be in an active state at the time the
request is made to recover data. If a policy is <b>mutable</b> (allowed to be updated),
it can also only happen while the policy is in an active state, and is done by creating
a new policy which will take place of the old one.
The dates are always interpreted in UTC (Coordinated Universal Time), at 12:00AM of the
selected date.
The two dates which are configurable, <b>from_date</b> and <b>upto_date</b> allow for
the following configurations:
<ul>
<li>
<b>from_date < upto_date</b>: makes the policy active during a time window. (e.g from_date:
2024/08/01, upto_date: 2024/09/01 would make the policy active only between those dates)
</li>
<li>
<b>upto_date < from_date</b>: makes the policy in-active during a time window (e.g upto_date:
2024/08/01, from_date: 2024/09/01 would make the policy in-active only between those
dates)
</li>
<li>
<b>upto_date only</b>: makes the policy expire after the <b>upto_date</b> (e.g upto_date:
2027/01/01 means the policy is never active again after this date.)
</li>
<li>
<b>from_date only</b>: makes the policy active after the <b>from_date</b> (e.g from_date:
2025/01/01 means the policy is active only starting after that date)
</li>
</ul>
</p>
<label for="policy_valid_upto_date"><b>upto_date</b></label>
<input type="date" id="policy_valid_upto_date" name="policy_valid_upto_date"> <input type="date" id="policy_valid_upto_date" name="policy_valid_upto_date">
<br> <br>
<br> <br>
<label for="policy_valid_after_date">Is the policy valid from a date?</label> <label for="policy_valid_after_date"><b>from_date</b></label>
<input type="date" id="policy_valid_after_date" name="policy_valid_after_date"> <input type="date" id="policy_valid_after_date" name="policy_valid_after_date">
<br> <br>
<br> <br>
<label for="policy_mutable">Is the policy editable (mutable)?</label> <label for="policy_mutable">Is the policy editable (mutable) while it's active?</label>
<br> <br>
<select name="policy_mutable" id="policy_mutable"> <select name="policy_mutable" id="policy_mutable">
<option disabled selected value> -- select an option -- </option> <option disabled selected value> -- select an option -- </option>
<option value="true">Yes</option> <option value="true">Yes</option>
<option value="false">No</option> <option value="false">No</option>
</select> </select>
</section>
<br> <hr class="divider">
<br>
<label for="remote_available">Can recovery be authorized using threshold based cryptographic signing?</label> <section>
<h2>Remote Recovery via Cryptographic Signatures</h2>
<label for="remote_available">Can recovery be authorized using threshold based cryptographic
signing?</label>
<br> <br>
<select name="remote_available" id="remote_available"> <select name="remote_available" id="remote_available">
<option disabled selected value> -- select an option -- </option> <option disabled selected value> -- select an option -- </option>
@ -31,8 +88,13 @@
<option value="false">No</option> <option value="false">No</option>
</select> </select>
<br>
<br>
<div id="remote_available_container" class="hidden"> <div id="remote_available_container" class="hidden">
<label>What threshold would you like to use for the cryptographic signing recovery method? (2/3, 3/5, 4/7 <label>What threshold would you like to use for the cryptographic signing recovery method? (2/3,
3/5,
4/7
etc)</label> etc)</label>
<br> <br>
<input type="text" id="remote_threshold" name="remote_threshold"> <input type="text" id="remote_threshold" name="remote_threshold">
@ -41,8 +103,12 @@
<input type="file" id="pub_keys" name="files[]" multiple> <input type="file" id="pub_keys" name="files[]" multiple>
</div> </div>
<br> </section>
<br>
<hr class="divider">
<section>
<h2>Recovery via KYC Validation and Statement of Intent</h2>
<label>Can recovery be authorized by persons using KYC?</label> <label>Can recovery be authorized by persons using KYC?</label>
<br> <br>
@ -63,16 +129,45 @@
<p>Please select KYC data for individuals who can participate in recovery:</p> <p>Please select KYC data for individuals who can participate in recovery:</p>
<input type="file" id="kyc_data" name="files[]" multiple> <input type="file" id="kyc_data" name="files[]" multiple>
</div> </div>
</section>
<label>Are both remote and KYC based recovery required? (If "No", either one can be used for recovery)</label> <hr class="divider">
<section>
<h2>Data Storage</h2>
<p>
This part of the policy allows you to select wether you would like
Distrust to fully back up all your data, or to only hold an encryption
key in escrow, in which case you are responsible for redundantly backing up
the encrypted data (learn more <a href="/data-storage.html">here</a>)
</p>
<label>Type of data storage</label>
<br>
<select name="multi_rule_requirement" id="multi_rule_requirement">
<option disabled selected value> -- select an option -- </option>
<option value="managed">Fully managed</option>
<option value="key_escrow">Key escrow only</option>
</select>
</section>
<hr class="divider">
<section>
<h2>Additional Configurations</h2>
<label>Are both remote and KYC based recovery required? (If "No", either one can be used for
recovery)</label>
<br> <br>
<select name="multi_rule_requirement" id="multi_rule_requirement"> <select name="multi_rule_requirement" id="multi_rule_requirement">
<option disabled selected value> -- select an option -- </option> <option disabled selected value> -- select an option -- </option>
<option value="true">Yes</option> <option value="true">Yes</option>
<option value="false">No</option> <option value="false">No</option>
</select> </select>
</section>
<button onclick="generatePolicy()">Generate Policy</button> <button onclick="generatePolicy()">Generate Policy</button>
</div>
<textarea id="policy" disabled placeholder="Click 'Generate Policy'"></textarea>
<script> <script>
function extractValues() { function extractValues() {
@ -136,6 +231,9 @@
const toml_policy = objectToTOML(policy_values); const toml_policy = objectToTOML(policy_values);
console.log(toml_policy); console.log(toml_policy);
const policy_text_el = document.getElementById('policy');
policy_text_el.value = toml_policy;
} }
function objectToTOML(obj, indent = '') { function objectToTOML(obj, indent = '') {
@ -160,7 +258,7 @@
} }
let remote_available_el = document.getElementById('remote_available'); let remote_available_el = document.getElementById('remote_available');
remote_available_el.addEventListener('input', function() { remote_available_el.addEventListener('input', function () {
let currentValue = remote_available_el.value; let currentValue = remote_available_el.value;
let remote_available_container = document.getElementById('remote_available_container'); let remote_available_container = document.getElementById('remote_available_container');
if (currentValue == 'true') { if (currentValue == 'true') {
@ -171,7 +269,7 @@
}); });
let kyc_available_el = document.getElementById('kyc_available'); let kyc_available_el = document.getElementById('kyc_available');
kyc_available_el.addEventListener('input', function() { kyc_available_el.addEventListener('input', function () {
let currentValue = kyc_available_el.value; let currentValue = kyc_available_el.value;
let remote_available_container = document.getElementById('kyc_available_container'); let remote_available_container = document.getElementById('kyc_available_container');
if (currentValue == 'true') { if (currentValue == 'true') {
@ -186,5 +284,35 @@
.hidden { .hidden {
display: none; display: none;
} }
input,
select,
textarea,
textarea::-webkit-input-placeholder {
border: 1px solid white;
}
#wizard-container {
border: 1px solid white;
border-radius: 20px;
padding: 30px;
}
.divider {
color: white;
margin: 50px 0px;
}
#policy {
height: 400px;
padding: 30px;
margin-top: 30px;
border-radius: 20px;
}
</style> </style>
</main>
{%- include footer.html -%}
</div>
</body> </body>
</html>

View File

@ -15,7 +15,7 @@ $base-font-size: 1.125rem !default;
$mobile-font-size: 1.125rem !default; $mobile-font-size: 1.125rem !default;
$base-line-height: 1.5 !default; $base-line-height: 1.5 !default;
$container-width: 90% !default; $container-width: 90% !default;
$container-max-width: 1000px !default; $container-max-width: 1300px !default;
/** /**
* Global * Global