<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn credential.get() rpId Tests</title>
<meta name="timeout" content="long">
<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org">
<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
    "use strict";

    var credPromise = createCredential();

    new GetCredentialsTest("options.publicKey.rpId", "")
        .addCredential(credPromise)
        .runTest("Bad rpId: empty string", "SecurityError");
    new GetCredentialsTest("options.publicKey.rpId", null)
        .addCredential(credPromise)
        .runTest("Bad rpId: null", "SecurityError");
    new GetCredentialsTest("options.publicKey.rpId", "invalid domain.com")
        .addCredential(credPromise)
        .runTest("Bad rpId: invalid domain (has space)", "SecurityError");
    new GetCredentialsTest("options.publicKey.rpId", "-invaliddomain.com")
        .addCredential(credPromise)
        .runTest("Bad rpId: invalid domain (starts with dash)", "SecurityError");
    new GetCredentialsTest("options.publicKey.rpId", "0invaliddomain.com")
        .addCredential(credPromise)
        .runTest("Bad rpId: invalid domain (starts with number)", "SecurityError");

    let hostAndPort = window.location.host;
    if (!hostAndPort.match(/:\d+$/)) {
        hostAndPort += ":443";
    }
    new GetCredentialsTest({path: "options.publicKey.rpId", value: hostAndPort})
        .addCredential(credPromise)
        .runTest("Bad rpId: host + port", "SecurityError");
});

/* JSHINT */
/* globals standardSetup, GetCredentialsTest, createCredential */
</script>
