blob: 31ec2d8b97f74d76f94f485ecb7b1a19f00a3a5f [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This is a sample policy file for a bogus company. It shows how to create
// a policy that requests a single certificate to be used to establish
// 802.11x. Eventually it will also show how to configure the network to use
// that policy.
var policy = null;
entd.onLoad =
function onLoad(manifest) {
// Instantiate our policy. The Policy object is defined by policy-utils.js,
// which should be located in the same directory as this file.
policy = new Policy(manifest || {});
// Set up some certs we might be interested in. We don't automatically set
// these up, this is only the menu of certs that can be mentioned in the
// manifest file. The list of certs we set up is stored in
// the array located at manifest.policyParams.certs. The array
// should contain a list of "local identifiers" as defined below.
policy.addCertificate(
// Local identifier for the certificate, not persisted to the TPM.
"wifi",
{ // Human readable label associated with this cert in the TPM.
label: "802.11x Wireless",
// Object ID associated with this cert in the TPM.
id: 1,
// This function will be called when the certificate is successfully
// installed.
"onInstall": util.fwdp(policy, "onWifiCertInstalled"),
// List of variables that the user may provide. Value is a list of
// attributes that will be used to render the input widget for
// the variable.
userVariables: {
password: { type: "password", label: "Password" }
},
// Parameters for the "Certificate Signing Request" request.
csr: {
subject: "/C=US/ST=Texas/L=Dallas/O=Example Inc/" +
"OU=pcloadletter/CN=%(userName).corp.example.com/" +
"emailAddress=%(userEmail)",
// Used to build the URL where we should send the CSR.
host: "localhost",
port: 4343,
auth: "%(userName):%(password)",
path: "/csr",
// HTTP POST parameters to use when submitting the request.
post_params: {
CertRequest: "%(csr)",
CertAttribute: "CertificateTemplate:Wireless802.1xUser",
email: "%(userEmail)",
SAN: "upn=%(userName)@corp.example.com",
},
},
issuer: {
// Used to build the URL where we should present the CSR in order
// to get the cert.
host: "localhost",
port: 4343,
auth: "%(userName):%(password)",
path: "/issue?id=%(requestId)",
}
});
policy.addCertificate(
"vpn",
{ // Human readable label associated with this cert in the TPM.
label: "Virtual Private Network (VPN)",
// Object ID associated with this cert in the TPM.
id: 2,
// List of variables that the user may provide. Value is a list of
// attributes that will be used to render the input widget for
// the variable.
userVariables: {
password: { type: "password", label: "Password" }
},
// Parameters for the "Certificate Signing Request" request.
csr: {
subject: "/C=US/ST=Texas/L=Dallas/O=Example Inc/" +
"OU=pcloadletter/CN=%(userName).corp.example.com/" +
"emailAddress=%(userEmail)",
// Used to build the URL where we should send the CSR.
host: "localhost",
port: 4343,
auth: "%(userName):%(password)",
path: "/csr",
// HTTP POST parameters to use when submitting the request.
post_params: {
CertRequest: "%(csr)",
CertAttribute: "CertificateTemplate:VPNUser",
email: "%(userEmail)",
SAN: "upn=%(userName)@corp.example.com",
},
},
issuer: {
// Used to build the URL where we should present the CSR in order
// to get the cert.
host: "localhost",
port: 4343,
auth: "%(userName):%(password)",
path: "/issue?id=%(requestId)",
}
});
entd.callbackServer.start(policy.callbacks);
}
// Called when entd stops for any reason. You might perform some cleanup like
// unconfiguring wireless networks here.
entd.onUnload =
function onUnload() {
entd.syslog.info("onUnload called.");
}
// This function will be called after a successful CSR request. It should
// inspect the repsponse (most likely response.content) and extract any
// variables that might be needed to form the certificate issue request.
Policy.Certificate.prototype.parseCSR =
function parseCSR(response) {
// Scrape the result looking for a ReqID...
var ary = response.content.match(/\WReqID=([^&]+)/i);
if (!ary)
throw "Unable to locate request id in CSR reply.";
this.info("Parsed request id: " + ary[1]);
this.setVariable("requestId", ary[1]);
}
// Called when the wifi certificate is successfully installed for the first
// time, and every time entd starts up and notices that this certificate has
// already been installed. If the firstInstall parameter is true, then
// this is the first time the certificate has been installed.
//
// This is hooked up in the addCertificate() call above.
Policy.prototype.onWifiCertInstalled =
function onWifiCertInstalled(cert, firstInstall) {
entd.syslog.info("onWifiCertInstalled called: firstInstall: " + firstInstall);
// This is where you might make use of the recently acquired certificate
// to set up a network.
}