Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

getServiceURL break url #21

Closed
melnikaite opened this issue Jan 11, 2017 · 4 comments · Fixed by #22
Closed

getServiceURL break url #21

melnikaite opened this issue Jan 11, 2017 · 4 comments · Fixed by #22

Comments

@melnikaite
Copy link

console.log(appEnv.getServiceURL('mongodb-instance'));

console.log(appEnv.getService('mongodb-instance').credentials.uri);

mongodb://admin:XXX@sl-us-dal-9-portal.4.dblayer.com:18394/:18394,sl-us-dal-9-portal.1.dblayer.com/admin?ssl=true

mongodb://admin:XXX@sl-us-dal-9-portal.4.dblayer.com:18394,sl-us-dal-9-portal.1.dblayer.com:18394/admin?ssl=true

@pmuellr
Copy link
Member

pmuellr commented Jan 13, 2017

Ah, yikes! smells like url.parse() shenanigans, since I just ran into something very similar in a different set of code.

Thanks for reporting!

pmuellr pushed a commit that referenced this issue Jan 13, 2017
fixes #21

Turns out the following is not always true:

```js
  url.format(url.parse(SomeURL)) == SomeURL
```

At least when the protocol isn't `http:` or `https:`.  cfenv expects this
to be true in `getServiceURL()`, when using the replacements argument.  It
seems to break for some example mongodb urls, like the one added to the
test in this commit.

Fix for now is that if there aren't any replacement values, then return early
with the currently calculated URL.  So it would still break if you passed
one of these not-parsed-correctly URLs and replacements, but the odds of that
seem pretty slim.

Also noticed that `url.format()`` must be standardizing URLs to return them with
a trailing `/` if there was no other path.  So now you don't always get that
trailing `/`. Seems survivable.
pmuellr pushed a commit that referenced this issue Jan 13, 2017
fixes #21

Turns out the following is not always true:

```js
  url.format(url.parse(SomeURL)) == SomeURL
```

At least when the protocol isn't `http:` or `https:`.  cfenv expects this
to be true in `getServiceURL()`, when using the replacements argument.  It
seems to break for some example mongodb urls, like the one added to the
test in this commit.

Fix for now is that if there aren't any replacement values, then return early
with the currently calculated URL.  So it would still break if you passed
one of these not-parsed-correctly URLs and replacements, but the odds of that
seem pretty slim.

Also noticed that `url.format()`` must be standardizing URLs to return them with
a trailing `/` if there was no other path.  So now you don't always get that
trailing `/`. Seems survivable.
@melnikaite
Copy link
Author

It'd be nice to have this fix in 1.0.4.
Are there any plans to make new release?

@pmuellr
Copy link
Member

pmuellr commented Feb 1, 2017

@melnikaite sorry, was waiting for a review in the 1.0.4 PR #23 . Ping'd reviewer again, will update tomorrow if I haven't heard back.

@pmuellr
Copy link
Member

pmuellr commented Feb 2, 2017

@melnikaite there's now a fresh 1.0.4 up on npm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants