diff --git a/docs/writing-a-profile.md b/docs/writing-a-profile.md index 4e376911..e44a8d0f 100644 --- a/docs/writing-a-profile.md +++ b/docs/writing-a-profile.md @@ -8,7 +8,7 @@ This guide is about writing such a profile. If you just want to use an already supported endpoint, refer to the [API documentation](readme.md) instead. -*Note*: **If you get stuck, ask for help by [creating an issue](https://github.com/derhuerst/hafas-client/issues/new)!** We want to help people expand the scope of this library. +*Note*: **If you get stuck, ask for help by [creating an issue](https://github.com/public-transport/hafas-client/issues/new)!** We want to help people expand the scope of this library. ## 0. How do the profiles work? @@ -61,7 +61,7 @@ If you pass this profile into `hafas-client`, the `parseLine` method will overri 1. **Get an iOS or Android device and download the "official" app** for the public transport provider that you want to build a profile for. 2. **Configure a [man-in-the-middle HTTP proxy](https://docs.mitmproxy.org/stable/concepts-howmitmproxyworks/)** like [mitmproxy](https://mitmproxy.org). - Configure your device to trust the self-signed SSL certificate, [as outlined in the mitmproxy docs](https://docs.mitmproxy.org/stable/concepts-certificates/). - - *Note*: This method does not work if the app uses [public key pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning). In this case (the app won't be able to query data), please [create an issue](https://github.com/derhuerst/hafas-client/issues/new), so we can discuss other techniques. + - *Note*: This method does not work if the app uses [public key pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning). In this case (the app won't be able to query data), please [create an issue](https://github.com/public-transport/hafas-client/issues/new), so we can discuss other techniques. 3. **Record requests of the app.** - [There's a video showing this step](https://stuff.jannisr.de/how-to-record-hafas-requests.mp4). - Make sure to cover all relevant sections of the app, e.g. "journeys", "departures", "live map". Better record more than less; You will regret not having enough information later on. @@ -74,7 +74,7 @@ If you pass this profile into `hafas-client`, the `parseLine` method will overri - **Identify the `locale`.** Basically guess work; Use the date & time formats as an indicator. - **Identify the `timezone`.** This may be tricky, a for example [Deutsche Bahn](https://en.wikipedia.org/wiki/Deutsche_Bahn) returns departures for Moscow as `+01:00` instead of `+03:00`. - **Copy the authentication** and other meta fields, namely `ver`, `ext`, `client` and `lang`. - - You can find these fields in the root of each request JSON. Check [a VBB request](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L13-L22) and [the corresponding VBB profile](https://github.com/derhuerst/hafas-client/blob/6e61097687a37b60d53e767f2711466b80c5142c/p/vbb/index.js#L22-L29) for an example. + - You can find these fields in the root of each request JSON. Check [a VBB request](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L13-L22) and [the corresponding VBB profile](https://github.com/public-transport/hafas-client/blob/6e61097687a37b60d53e767f2711466b80c5142c/p/vbb/index.js#L22-L29) for an example. - Add a function `transformReqBody(body)` to your profile, which assigns them to `body`. - Some profiles have a `checksum` parameter (like [here](https://gist.github.com/derhuerst/2a735268bd82a0a6779633f15dceba33#file-journey-details-1-http-L1)) or two `mic` & `mac` parameters (like [here](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L1)). If you see one of them in your requests, jump to [*Appendix A: checksum, mic, mac*](#appendix-a-checksum-mic-mac). Unfortunately, this is necessary to get the profile working. @@ -116,7 +116,7 @@ Let's break this down: todo: `defaultProducts`, `allProducts`, `bitmasks`, add to profile -If you want, you can now **verify that the profile works**; We've prepared [a script](https://runkit.com/derhuerst/hafas-client-profile-example/0.1.0) for that. Alternatively, [submit a Pull Request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) and we will help you out with testing and improvements. +If you want, you can now **verify that the profile works**; We've prepared [a script](https://runkit.com/public-transport/hafas-client-profile-example/0.1.0) for that. Alternatively, [submit a Pull Request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) and we will help you out with testing and improvements. ### Finding the right values for the `bitmask` field @@ -157,10 +157,10 @@ You can just query these, as long as you send a formally correct request. ### endpoints using the `checksum` query parameter -`checksum` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code): `hafas-client` will compute it by [hashing](https://en.wikipedia.org/wiki/Hash_function) the request body and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/derhuerst/hafas-client/issues/new) instead. +`checksum` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code): `hafas-client` will compute it by [hashing](https://en.wikipedia.org/wiki/Hash_function) the request body and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/public-transport/hafas-client/issues/new) instead. ### endpoints using the `mic` & `mac` query parameters `mic` is a [message integrity code](https://en.wikipedia.org/wiki/Message_authentication_code), the [hash](https://en.wikipedia.org/wiki/Hash_function) of the request body. -`mac` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code), the hash of `mic` and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/derhuerst/hafas-client/issues/new) instead. +`mac` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code), the hash of `mic` and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/public-transport/hafas-client/issues/new) instead. diff --git a/index.js b/index.js index 158d0151..374c1aa7 100644 --- a/index.js +++ b/index.js @@ -105,7 +105,7 @@ const createClient = (profile, request = _request) => { // `CGI_READ_FAILED` if you pass `numF`, the parameter for the number // of results. To circumvent this, we loop here, collecting journeys // until we have enough. - // see https://github.com/derhuerst/hafas-client/pull/23#issuecomment-370246163 + // see https://github.com/public-transport/hafas-client/pull/23#issuecomment-370246163 // todo: check if `numF` is supported again, revert this change const journeys = [] const more = (when, journeysRef) => { diff --git a/lib/request.js b/lib/request.js index 96d5da5f..839a3e4d 100644 --- a/lib/request.js +++ b/lib/request.js @@ -20,7 +20,7 @@ const request = (profile, data) => { headers: { 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip, deflate', - 'user-agent': 'https://github.com/derhuerst/hafas-client' + 'user-agent': 'https://github.com/public-transport/hafas-client' }, query: {} }) diff --git a/package.json b/package.json index 90938153..c82a47f6 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,9 @@ "contributors": [ "Julius Tens " ], - "homepage": "https://github.com/derhuerst/hafas-client", - "repository": "derhuerst/hafas-client", - "bugs": "https://github.com/derhuerst/hafas-client/issues", + "homepage": "https://github.com/public-transport/hafas-client", + "repository": "public-transport/hafas-client", + "bugs": "https://github.com/public-transport/hafas-client/issues", "license": "ISC", "keywords": [ "hafas", diff --git a/parse/departure.js b/parse/departure.js index 3868c988..158eb1ea 100644 --- a/parse/departure.js +++ b/parse/departure.js @@ -1,10 +1,10 @@ 'use strict' -// todos from derhuerst/hafas-client#2 +// todos from public-transport/hafas-client#2 // - stdStop.dPlatfS, stdStop.dPlatfR // todo: what is d.jny.dirFlg? // todo: d.stbStop.dProgType -// todo: d.freq, d.freq.jnyL, see https://github.com/derhuerst/hafas-client/blob/9203ed1481f08baacca41ac5e3c19bf022f01b0b/parse.js#L115 +// todo: d.freq, d.freq.jnyL, see https://github.com/public-transport/hafas-client/blob/9203ed1481f08baacca41ac5e3c19bf022f01b0b/parse.js#L115 const createParseDeparture = (profile, stations, lines, remarks) => { const findRemark = rm => remarks[parseInt(rm.remX)] || null diff --git a/readme.md b/readme.md index d12d8df5..fb215256 100644 --- a/readme.md +++ b/readme.md @@ -11,8 +11,8 @@ HAFAS endpoint | wrapper library | docs | example code | source code [Nahverkehrsverbund Schleswig-Holstein (NAH.SH)](https://de.wikipedia.org/wiki/Nahverkehrsverbund_Schleswig-Holstein) | [`nahsh-hafas`](https://github.com/juliuste/nahsh-hafas) | [docs](p/nahsh/readme.md) | [example code](p/nahsh/example.js) | [src](p/nahsh/index.js) [![npm version](https://img.shields.io/npm/v/hafas-client.svg)](https://www.npmjs.com/package/hafas-client) -[![build status](https://img.shields.io/travis/derhuerst/hafas-client.svg)](https://travis-ci.org/derhuerst/hafas-client) -![ISC-licensed](https://img.shields.io/github/license/derhuerst/hafas-client.svg) +[![build status](https://img.shields.io/travis/public-transport/hafas-client.svg)](https://travis-ci.org/public-transport/hafas-client) +![ISC-licensed](https://img.shields.io/github/license/public-transport/hafas-client.svg) [![chat on gitter](https://badges.gitter.im/derhuerst.svg)](https://gitter.im/derhuerst) [![support me on Patreon](https://img.shields.io/badge/support%20me-on%20patreon-fa7664.svg)](https://patreon.com/derhuerst) @@ -181,4 +181,4 @@ The returned [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript ## Contributing -If you **have a question**, **found a bug** or want to **propose a feature**, have a look at [the issues page](https://github.com/derhuerst/hafas-client/issues). +If you **have a question**, **found a bug** or want to **propose a feature**, have a look at [the issues page](https://github.com/public-transport/hafas-client/issues). diff --git a/test/oebb.js b/test/oebb.js index 7427b6db..f9ee62d9 100644 --- a/test/oebb.js +++ b/test/oebb.js @@ -95,7 +95,7 @@ const assertValidPrice = (t, p) => { } // todo: fix this upstream -// see https://github.com/derhuerst/hafas-client/blob/c6e558be217667f1bcdac4a605898eb75ea80374/p/oebb/products.js#L71 +// see https://github.com/public-transport/hafas-client/blob/c6e558be217667f1bcdac4a605898eb75ea80374/p/oebb/products.js#L71 const assertValidLine = (t, l) => { // with optional mode const validators = Object.assign({}, validateFptf.defaultValidators, { line: validateLineWithoutMode diff --git a/test/validate-line-without-mode.js b/test/validate-line-without-mode.js index 71068e32..8f916348 100644 --- a/test/validate-line-without-mode.js +++ b/test/validate-line-without-mode.js @@ -19,7 +19,7 @@ const validateLineWithoutMode = (validate, line, name) => { a.ok(line.name.length > 0, name + '.name can\'t be empty') // skipping line validation here - // see https://github.com/derhuerst/hafas-client/issues/8#issuecomment-355839965 + // see https://github.com/public-transport/hafas-client/issues/8#issuecomment-355839965 if (is.undefined(line.mode) || is.null(line.mode)) { console.error(`ÖBB: Missing \`mode\` for line ${line.name} (at ${name}).`) }