Skip to content
Browse files

Change browserid.org urls to persona.org, introduce static.login.pers…

…ona.org for all static resources.
  • Loading branch information...
1 parent 46f0e88 commit 96b20bdbe046251cc10e2eb0f1616c9426ed77ef @lloyd lloyd committed Jun 7, 2012
View
6 README.md
@@ -5,15 +5,15 @@
Here lives the [BrowserID][] implementation. BrowserID is an implementation of the
[verified email protocol][VEP].
- [BrowserID]:https://browserid.org
+ [BrowserID]:https://login.persona.org
[VEP]:https://wiki.mozilla.org/Labs/Identity/VerifiedEmailProtocol
This repository contains several distinct things related to BrowserID:
* **the browserid server** - a node.js server which implements a web services api, stores a record of users, the email addresses they've verified, a bcrypted password, outstanding verification tokens, etc
- * **the verifier** - a stateless node.js server which does cryptographic verification of assertions. This thing is hosted on browserid.org as a convenience, but people using browserid can choose to host their own version if they wish to.
+ * **the verifier** - a stateless node.js server which does cryptographic verification of assertions. This thing is hosted on login.persona.org as a convenience, but people using browserid can choose to host their own version if they wish to.
* **sample and test code** - to test the above
- * **the browserid.org website** - the templates, css, and javascript that make up the visible part of browserid.org
+ * **the login.persona.org website** - the templates, css, and javascript that make up the visible part of login.persona.org
* **the javascript/HTML dialog & include library** - this is include.js and the code that it includes, the bit that someone using browserid will include.
## Dependencies
View
7 bin/browserid
@@ -105,13 +105,12 @@ app.use(cachify.setup(assets(config.get('supported_languages')),
{
prefix: config.get('cachify_prefix'),
production: config.get('use_minified_resources'),
- root: static_root,
+ root: static_root
}));
-
// #7 - perform response substitution to support local/dev/beta environments
-// (specifically, this replaces URLs in responses, e.g. https://browserid.org
-// with https://diresworb.org)
+// (specifically, this replaces URLs in responses, e.g. https://login.persona.org
+// with https://login.anosrep.org)
config.performSubstitution(app);
// #8 - handle /wsapi requests
View
14 docs/DEPLOYMENT.md
@@ -9,19 +9,19 @@ Reader beware.
# How to deploy BrowserID
This describes how to take the code here, put it on a server, and build
-a service like browserid.org.
+a service like persona.org.
So what are we deploying, anyway?
* *the browserid server* - a node.js server which implements a web services
api, stores a record of users, the email addresses they've verified, a
bcrypted password, outstanding verification tokens, etc.
* *the verifier* - a stateless node.js server which does cryptographic
- verification of assertions. This thing is hosted on browserid.org as a
+ verification of assertions. This thing is hosted on persona.org as a
convenience, but people using browserid can choose to relocated it if they
want to their own servers.
- * *the browserid.org website* - the templates, css, and javascript that make
- up the visible part of browserid.org
+ * *the persona.org website* - the templates, css, and javascript that make
+ up the visible part of persona.org
* *the javascript/HTML dialog & include library* - this is include.js and the
code that it includes, the bit that someone using browserid will include.
@@ -216,7 +216,7 @@ check host verifier with address 127.0.0.1
5. create a file to run the browserid server at `/etc/monit.d/browserid`:
<pre>
-check host browserid.org with address 127.0.0.1
+check host persona.org with address 127.0.0.1
start program = "/etc/monit/start_node_server /home/browserid/code/browserid/run.js"
as uid "www-data" and gid "www-data"
stop program = "/usr/bin/pkill -f '/usr/local/bin/node /home/browserid/code/browserid/run.js'"
@@ -276,7 +276,7 @@ http {
<pre>
server {
listen 80 default;
- server_name browserid.org;
+ server_name persona.org;
# pass /verify invocations to the verifier
location /verify {
@@ -294,7 +294,7 @@ server {
5. restart your webserver: `sudo /etc/init.d/nginx restart`
- confirm that it's accepting requests: `curl -I -H 'Host: browserid.org' http://localhost:80/`
+ confirm that it's accepting requests: `curl -I -H 'Host: persona.org' http://localhost:80/`
### 8. Set up log rotation
View
4 docs/PRIMARY_PROTOCOL.md
@@ -166,7 +166,7 @@ properties available to normal web content.
To support browsers without native BrowserID support, the provisioning
content should include a javascript shim, hosted at:
- https://browserid.org/provisioning_api.js
+ https://login.persona.org/provisioning_api.js
### 4.3. BrowserID API
@@ -269,7 +269,7 @@ user has successfully authenticated with the primary.
To support browsers without native BrowserID support, the
authentication page should include a javascript shim, hosted at:
- https://browserid.org/authentication_api.js
+ https://login.persona.org/authentication_api.js
### 5.3 BrowserID API
View
2 example/primary/provision.html
@@ -5,7 +5,7 @@
<html>
<head>
-<script type="text/javascript" src="https://browserid.org/provisioning_api.js"></script>
+<script type="text/javascript" src="https://static.login.persona.org/provisioning_api.js"></script>
<script type="text/javascript" src="/jquery.js"></script>
<script type="text/javascript">
View
2 example/rp/index.html
@@ -110,7 +110,7 @@
</body>
<script src="jquery-min.js"></script>
-<script src="https://browserid.org/include.js"></script>
+<script src="https://login.persona.org/include.js"></script>
<script>
try {
View
6 lib/browserid/views.js
@@ -165,7 +165,7 @@ exports.setup = function(app) {
});
// serve up testing templates. but NOT in staging or production. see GH-1044
- if ([ 'https://browserid.org', 'https://diresworb.org' ].indexOf(config.get('public_url')) === -1) {
+ if ([ 'https://login.persona.org', 'https://login.anosrep.org' ].indexOf(config.get('public_url')) === -1) {
// serve test.ejs to /test or /test/ or /test/index.html
app.get(/^\/test\/(?:index.html)?$/, function (req, res) {
res.render('test.ejs', {title: 'BrowserID QUnit Test', layout: false});
@@ -210,11 +210,11 @@ exports.setup = function(app) {
});
// the "declaration of support" style publishing of the public key.
- // BrowserID.org is a (uh, THE) secondary, it should publish its key
+ // login.persona.org is a (uh, THE) secondary, it should publish its key
// in a manner that is symmetric with how primaries do. At present,
// the absence of 'provisioning' and 'authentication' keys indicates
// that this is a secondary, and verifiers should only trust
- // browserid.org as a secondary (and anyone else they decide to for
+ // login.persona.org as a secondary (and anyone else they decide to for
// whatever reason).
app.get("/.well-known/browserid", function(req, res) {
res.json({ 'public-key': publicKey.toSimpleObject() });
View
42 lib/configuration.js
@@ -59,8 +59,18 @@ var conf = module.exports = convict({
},
public_url: {
doc: "The publically visible URL of the deployment",
- format: 'string = "https://browserid.org"',
- env: 'URL'
+ format: 'string = "https://login.persona.org"',
+ env: 'PUBLIC_URL'
+ },
+ public_static_url: {
+ doc: "The publically visible URL from which static resources are served",
+ format: 'string',
+ env: 'PUBLIC_STATIC_URL'
+ },
+ public_verifier_url: {
+ doc: "The publically visible URL where incoming verification requests are handled",
+ format: 'string',
+ env: 'PUBLIC_VERIFIER_URL'
},
scheme: {
// XXX should we deprecate scheme as it's redundant and derived from 'public_url' ?
@@ -265,6 +275,19 @@ if (conf.get('env') === 'test_json') {
conf.set('database.driver', 'mysql');
}
+// if static and verifier urls are not explicitly set, default them to the
+// same as the public url (used in ephemeral and local deployments)
+if (!conf.has('public_static_url')) {
+ conf.set('public_static_url', conf.get('public_url'));
+}
+if (!conf.has('public_verifier_url')) {
+ conf.set('public_verifier_url', conf.get('public_url'));
+}
+
+// augment the cachify prefix with the public_static_url
+var prefix = urlparse(conf.get('public_static_url') + "/" + conf.get('cachify_prefix'));
+conf.set('cachify_prefix', prefix.normalize().toString());
+
// validate the configuration based on the above specification
conf.validate();
@@ -274,18 +297,25 @@ conf.validate();
*
* Note, for a 'local' environment, no re-write is needed because this is
* handled at a higher level. For other environments, only perform re-writing
- * if the host, port, or scheme are different than https://browserid.org:443
+ * if the host, port, or scheme are different than https://login.persona.org:443
* (all source files always should have the production hostname written into them)
*/
module.exports.performSubstitution = function(app) {
- if (conf.get('public_url') != 'https://browserid.org') {
+ if (conf.get('public_url') != 'https://login.persona.org' ||
+ conf.get('public_static_url') != 'https://static.login.persona.org' ||
+ conf.get('public_verifier_url') != 'https://verifier.login.persona.org')
+ {
app.use(postprocess(function(req, buffer) {
- return buffer.toString().replace(new RegExp('https://browserid.org', 'g'), conf.get('public_url'));
+ return buffer.toString()
+ .replace(new RegExp('https://login.persona.org', 'g'), conf.get('public_url'))
+ .replace(new RegExp('https://static.login.persona.org', 'g'), conf.get('public_static_url'))
+ .replace(new RegExp('https://verifier.login.persona.org', 'g'), conf.get('public_verifier_url'));
}));
}
};
// log the process_type
process.nextTick(function() {
- require("./logging.js").logger.info("process type is " + conf.get("process_type"));
+ var logging = require("./logging.js").logger;
+ logging.info("process type is " + conf.get("process_type"));
});
View
4 lib/email.js
@@ -60,9 +60,9 @@ function doSend(landing_page, email, site, secret, langContext) {
console.log("\nVERIFICATION URL:\n" + url + "\n");
} else {
// TODO(aok) extract_po.sh isn't seeing this string if it's below in object literal
- var subject = format(_("Complete Login to %s using BrowserID"), [site]);
+ var subject = format(_("Complete Login to %s using Persona"), [site]);
emailer.send_mail({
- sender: "BrowserID@browserid.org",
+ sender: "Persona@persona.org",
to: email,
subject: subject,
body: template({ link: url, site: site, gettext: _, format: format })
View
4 lib/wsapi.js
@@ -42,8 +42,8 @@ const COOKIE_SECRET = secrets.hydrateSecret('browserid_cookie', config.get('var_
var COOKIE_KEY = 'browserid_state';
// to support testing of browserid, we'll add a hash fragment to the cookie name for
-// sites other than browserid.org. This is to address a bug in IE, see issue #296
-if (config.get('public_url').indexOf('https://browserid.org') !== 0) {
+// sites other than login.persona.org. This is to address a bug in IE, see issue #296
+if (config.get('public_url').indexOf('https://login.persona.org') !== 0) {
const crypto = require('crypto');
var hash = crypto.createHash('md5');
hash.update(config.get('public_url'));
View
4 resources/static/include_js/include.js
@@ -1,5 +1,5 @@
/**
- * Uncompressed source can be found at https://browserid.org/include.orig.js
+ * Uncompressed source can be found at https://login.persona.org/include.orig.js
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -924,7 +924,7 @@
}
if (!navigator.id.request || navigator.id._shimmed) {
- var ipServer = "https://browserid.org";
+ var ipServer = "https://login.persona.org";
var userAgent = navigator.userAgent;
// We must check for both XUL and Java versions of Fennec. Both have
// distinct UA strings.
View
6 resources/static/pages/page_helpers.js
@@ -138,13 +138,13 @@ BrowserID.PageHelpers = (function() {
var url = helpers.toURL(baseURL, {
email: email,
- return_to: "https://browserid.org/authenticate_with_primary#complete"
+ return_to: "https://login.persona.org/authenticate_with_primary#complete"
});
winchan.open({
- url: "https://browserid.org/authenticate_with_primary",
+ url: "https://login.persona.org/authenticate_with_primary",
// This is the relay that will be used when the IdP redirects to sign_in_complete
- relay_url: "https://browserid.org/relay",
+ relay_url: "https://login.persona.org/relay",
window_features: "width=700,height=375",
params: url
}, function(error, result) {
View
2 resources/static/provisioning_api.js
@@ -626,7 +626,7 @@
}
if (!navigator.id.beginProvisioning || navigator.id._primaryAPIIsShimmed) {
- var ipServer = "https://browserid.org";
+ var ipServer = "https://login.persona.org";
var chan = Channel.build({window: window.parent, origin: ipServer, scope: "vep_prov"});
View
14 resources/static/shared/user.js
@@ -329,8 +329,8 @@ BrowserID.User = (function() {
/**
* A full provision a primary user, if they are authenticated, save their
- * cert/keypair. Note, we do not authenticate to browserid.org but
- * merely get an assertion for browserid.org so that we can either add the
+ * cert/keypair. Note, we do not authenticate to login.persona.org but
+ * merely get an assertion for login.persona.org so that we can either add the
* email to the current account or authenticate the user if not
* authenticated.
* @method provisionPrimaryUser
@@ -349,8 +349,8 @@ BrowserID.User = (function() {
if(authInfo.authenticated) {
persistEmailKeypair(email, "primary", authInfo.keypair, authInfo.cert,
function() {
- // We are getting an assertion for browserid.org.
- User.getAssertion(email, "https://browserid.org", function(assertion) {
+ // We are getting an assertion for persona.org.
+ User.getAssertion(email, "https://login.persona.org", function(assertion) {
if (assertion) {
onComplete("primary.verified", {
assertion: assertion
@@ -621,7 +621,7 @@ BrowserID.User = (function() {
},
/**
- * Sync local identities with browserid.org. Generally should not need to
+ * Sync local identities with login.persona.org. Generally should not need to
* be called.
* @method syncEmails
* @param {function} [onComplete] - Called whenever complete.
@@ -1186,8 +1186,8 @@ BrowserID.User = (function() {
// Set origin to default to the current domain. Other contexts that use user.js,
// like dialogs or iframes, will call setOrigin themselves to update this to
- // the origin of the of the RP. On browserid.org, it will remain the origin of
- // browserid.org
+ // the origin of the of the RP. On login.persona.org, it will remain the origin of
+ // login.persona.org
var currentOrigin = window.location.protocol + '//' + window.location.hostname;
if (window.location.port) {
currentOrigin += ':' + window.location.port;
View
4 resources/static/test/cases/pages/verify_secondary_address.js
@@ -67,12 +67,12 @@
});
asyncTest("no password: start with good token and site", function() {
- storage.setStagedOnBehalfOf("browserid.org");
+ storage.setStagedOnBehalfOf("persona.org");
createController(config, function() {
testEmail();
ok($(".siteinfo").is(":visible"), "siteinfo is visible when we say what it is");
- equal($(".website:nth(0)").text(), "browserid.org", "origin is updated");
+ equal($(".website:nth(0)").text(), "persona.org", "origin is updated");
testHasClass("body", "complete");
start();
});
View
2 resources/static/test/cases/resources/internal_api.js
@@ -11,7 +11,7 @@
network = bid.Network,
user = bid.User,
xhr = bid.Mocks.xhr,
- origin = "https://browserid.org",
+ origin = "https://login.persona.org",
storage = bid.Storage,
moduleManager = bid.module,
testHelpers = bid.TestHelpers;
View
8 resources/static/test/cases/shared/helpers.js
@@ -90,18 +90,18 @@
});
test("toURL with no GET parameters", function() {
- var url = helpers.toURL("https://browserid.org");
+ var url = helpers.toURL("https://login.persona.org");
- equal(url, "https://browserid.org", "correct URL without GET parameters");
+ equal(url, "https://login.persona.org", "correct URL without GET parameters");
});
test("toURL with GET parameters", function() {
- var url = helpers.toURL("https://browserid.org", {
+ var url = helpers.toURL("https://login.persona.org", {
email: "testuser@testuser.com",
status: "complete"
});
- equal(url, "https://browserid.org?email=testuser%40testuser.com&status=complete", "correct URL with GET parameters");
+ equal(url, "https://login.persona.org?email=testuser%40testuser.com&status=complete", "correct URL with GET parameters");
});
test("whitelistFilter an object", function() {
View
10 resources/static/test/cases/shared/user.js
@@ -78,11 +78,11 @@ var jwcrypto = require("./lib/jwcrypto");
});
test("setOrigin, getHostname", function() {
- var origin = "http://browserid.org";
+ var origin = "http://persona.org";
lib.setOrigin(origin);
var hostname = lib.getHostname();
- equal(hostname, "browserid.org", "getHostname returns only the hostname");
+ equal(hostname, "persona.org", "getHostname returns only the hostname");
});
test("getStoredEmailKeypairs without key - return all identities", function() {
@@ -156,7 +156,7 @@ var jwcrypto = require("./lib/jwcrypto");
lib.createPrimaryUser({email: "unregistered@testuser.com"}, function(status) {
equal(status, "primary.verified", "primary user is already verified, correct status");
network.checkAuth(function(authenticated) {
- equal(authenticated, "assertion", "after provisioning user, user should be automatically authenticated to BrowserID");
+ equal(authenticated, "assertion", "after provisioning user, user should be automatically authenticated to Persona");
start();
});
}, testHelpers.unexpectedXHRFailure);
@@ -1070,7 +1070,7 @@ var jwcrypto = require("./lib/jwcrypto");
equal(info.email, "unregistered@testuser.com", "correct address");
equal(info.type, "secondary", "correct type");
equal(info.email, "unregistered@testuser.com", "correct email");
- equal(info.known, false, "address not known to BrowserID");
+ equal(info.known, false, "address not known to Persona");
start();
},
testHelpers.unexpectedFailure
@@ -1084,7 +1084,7 @@ var jwcrypto = require("./lib/jwcrypto");
function(info) {
equal(info.type, "secondary", "correct type");
equal(info.email, "registered@testuser.com", "correct email");
- equal(info.known, true, "address known to BrowserID");
+ equal(info.known, true, "address known to Persona");
start();
},
testHelpers.unexpectedFailure
View
2 resources/static/test/testHelpers/helpers.js
@@ -20,7 +20,7 @@ BrowserID.TestHelpers = (function() {
tooltip = bid.Tooltip,
registrations = [],
calls = {},
- testOrigin = "https://browserid.org";
+ testOrigin = "https://login.persona.org";
function register(message, cb) {
registrations.push(mediator.subscribe(message, function(msg, info) {
View
4 resources/views/authenticate_with_primary.ejs
@@ -6,7 +6,7 @@
<head>
<meta charset="utf-8">
<title>Browser ID</title>
- <script type='text/javascript' src='https://browserid.org/lib/winchan.js'></script>
- <script type='text/javascript' src='https://browserid.org/auth_with_idp/main.js'></script>
+ <script type='text/javascript' src='https://static.login.persona.org/lib/winchan.js'></script>
+ <script type='text/javascript' src='https://static.login.persona.org/auth_with_idp/main.js'></script>
</head>
</html>
View
1 resources/views/layout.ejs
@@ -33,7 +33,6 @@
<li class="signOut"><a class="signOut" href="/"><%= gettext("Sign Out") %></a></li>
</ul>
-
</header>
<div id="wait"><div class="contents"></div></div>
View
2 resources/views/privacy.ejs
@@ -61,7 +61,7 @@
<p>Mozilla is an open organization that believes in sharing as much information as possible about its products, its operations, and its associations with its wider community. As such, Persona Service users should expect that Mozilla will make all Usage Statistics publicly available at some point. However, any publicly available Usage Statistics will only be reported on an aggregate, anonymous basis. No Personal Information or Potentially Personal Information will be available in any of these public reports.</p>
<h5>How to Disable or Opt-Out of Persona</h5>
- <p>If at any time, you decide you no longer want to use the Persona Service, you may cancel your Persona Account by visiting <kbd>https://browserid.org/</kbd>, signing in using any of your email addresses and your password, clicking the "edit" button, and clicking "remove" next to each of your email addresses.</p>
+ <p>If at any time, you decide you no longer want to use the Persona Service, you may cancel your Persona Account by visiting <kbd>https://login.persona.org/</kbd>, signing in using any of your email addresses and your password, clicking the "edit" button, and clicking "remove" next to each of your email addresses.</p>
<h5>Other Disclosures</h5>
<p>In certain other limited situations, Mozilla may disclose your Personal Information, such as when necessary to protect our websites and operations (e.g., against attacks); to protect the rights, privacy, safety, or property of Mozilla or its users; to enforce our terms of service; and to pursue available legal remedies. Additionally, Mozilla may need to transfer Personal Information to an affiliate or successor in the event of a change of our corporate structure or status, such as in the event of a restructuring, sale, or bankruptcy.</p>
View
2 resources/views/relay.ejs
@@ -6,6 +6,6 @@
<head>
<meta charset="utf-8">
<title>Browser ID</title>
- <script type='text/javascript' src='https://browserid.org/relay/relay.js'></script>
+ <script type='text/javascript' src='https://static.login.persona.org/relay/relay.js'></script>
</head>
</html>
View
2 resources/views/tos.ejs
@@ -43,7 +43,7 @@
trade or resell the Services for any purpose, unless you have been specifically permitted to do so in writing by Mozilla, or
</li>
<li>
- access (or attempt to access) the Services by any means other than the Persona site itself (at browserid.org), official Mozilla-branded software (Firefox, Firefox for Mobile, and Firefox Home, referred to in this document as “Firefox Clients”), or third party software that utilizes APIs authorized and provided by Mozilla (“Third Party Clients”), unless you have been specifically allowed to do so in writing by Mozilla.
+ access (or attempt to access) the Services by any means other than the Persona site itself (at persona.org), official Mozilla-branded software (Firefox, Firefox for Mobile, and Firefox Home, referred to in this document as “Firefox Clients”), or third party software that utilizes APIs authorized and provided by Mozilla (“Third Party Clients”), unless you have been specifically allowed to do so in writing by Mozilla.
</li>
</ul>
View
2 scripts/browserid.spec
@@ -15,7 +15,7 @@ Requires: openssl nodejs
BuildRequires: gcc-c++ git jre make npm openssl-devel expat-devel
%description
-browserid server & web home for browserid.org
+persona server & web home for persona.org
%prep
%setup -q -c -n browserid
View
8 scripts/check_primary_support
@@ -65,10 +65,10 @@ function getResource(mode, url, urls, opts, cb) {
'auth': '/authentication_api.js',
'prov': '/provisioning_api.js'
};
- if (body.indexOf(util.format("https://browserid.org%s", includes[mode])) == -1 &&
- body.indexOf(util.format("https://diresworb.org%s", includes[mode])) == -1 &&
- body.indexOf(util.format("https://dev.diresworb.org%s", includes[mode])) == -1) {
- console.log(util.format("WARNING: No https://browserid.org/%s script tag detected", includes[mode]));
+ if (body.indexOf(util.format("https://login.persona.org%s", includes[mode])) == -1 &&
+ body.indexOf(util.format("https://login.anosrep.org%s", includes[mode])) == -1 &&
+ body.indexOf(util.format("https://login.dev.anosrep.org%s", includes[mode])) == -1) {
+ console.log(util.format("WARNING: No https://persona.org/%s script tag detected", includes[mode]));
}
if (cb) {
cb();
View
2 scripts/create_account.js
@@ -13,7 +13,7 @@ var argv = require('optimist')
.describe('h', 'display this usage message')
.alias('s', 'server')
.describe('s', 'server url to stage on')
-.default('s', 'https://browserid.org')
+.default('s', 'https://login.persona.org')
.alias('d', 'domain')
.describe('d', 'domain that email is staged on behalf of, will be in email body')
.default('d', "create_account_command_line_tool.com")
View
2 scripts/run_locally.js
@@ -56,7 +56,7 @@ process.env['VERIFIER_URL'] = 'http://' + HOST + ":10000/verify";
process.env['KEYSIGNER_URL'] = 'http://' + HOST + ":10003";
process.env['ROUTER_URL'] = 'http://' + HOST + ":10002";
-process.env['URL'] = process.env['ROUTER_URL'];
+process.env['PUBLIC_URL'] = process.env['ROUTER_URL'];
// if the environment is a 'test_' environment, then we'll use an
// ephemeral database
View
2 scripts/serve_example.js
@@ -21,7 +21,7 @@ if (process.env['BROWSERID_URL']) {
console.log('using browserid server at ' + burl);
exampleServer.use(postprocess(function(req, buffer) {
- return buffer.toString().replace(new RegExp('https://browserid.org', 'g'), burl);
+ return buffer.toString().replace(new RegExp('https://login.persona.org', 'g'), burl);
}));
}
View
2 scripts/serve_example_primary.js
@@ -46,7 +46,7 @@ if (process.env['BROWSERID_URL']) {
console.log('using browserid server at ' + burl);
exampleServer.use(postprocess(function(req, buffer) {
- return buffer.toString().replace(new RegExp('https://browserid.org', 'g'), burl);
+ return buffer.toString().replace(new RegExp('https://login.persona.org', 'g'), burl);
}));
}

0 comments on commit 96b20bd

Please sign in to comment.
Something went wrong with that request. Please try again.