-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add Bungie provider * Use absolute URL for images * Correct image URL and use consistent formatting Co-authored-by: Nico Domino <[email protected]>
- Loading branch information
1 parent
f47f5c6
commit 958c31a
Showing
5 changed files
with
193 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
export default (options) => { | ||
return { | ||
id: 'bungie', | ||
name: 'Bungie', | ||
type: 'oauth', | ||
version: '2.0', | ||
scope: '', | ||
params: { reauth: 'true', grant_type: 'authorization_code' }, | ||
accessTokenUrl: 'https://www.bungie.net/platform/app/oauth/token/', | ||
requestTokenUrl: 'https://www.bungie.net/platform/app/oauth/token/', | ||
authorizationUrl: 'https://www.bungie.net/en/OAuth/Authorize?response_type=code', | ||
profileUrl: 'https://www.bungie.net/platform/User/GetBungieAccount/{membershipId}/254/', | ||
prepareProfileRequest: ({ provider, url, headers, results }) => { | ||
if (!results.membership_id) { | ||
// internal error | ||
// @TODO: handle better | ||
throw new Error('Expected membership_id to be passed.') | ||
} | ||
|
||
if (!provider.apiKey) { | ||
throw new Error('The Bungie provider requires the apiKey option to be present.') | ||
} | ||
|
||
headers['X-API-Key'] = provider.apiKey | ||
url = url.replace('{membershipId}', results.membership_id) | ||
|
||
return url | ||
}, | ||
profile: (profile) => { | ||
const { bungieNetUser: user } = profile.Response | ||
|
||
return { | ||
id: user.membershipId, | ||
name: user.displayName, | ||
image: `https://www.bungie.net${user.profilePicturePath.startsWith('/') ? '' : '/'}${user.profilePicturePath}`, | ||
email: null | ||
} | ||
}, | ||
apiKey: null, | ||
clientId: null, | ||
clientSecret: null, | ||
...options | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
--- | ||
id: bungie | ||
title: Bungie | ||
--- | ||
|
||
## Documentation | ||
|
||
https://github.com/Bungie-net/api/wiki/OAuth-Documentation | ||
|
||
## Configuration | ||
|
||
https://www.bungie.net/en/Application | ||
|
||
## Example | ||
|
||
```js | ||
import Providers from `next-auth/providers` | ||
... | ||
providers: [ | ||
Providers.Bungie({ | ||
clientId: process.env.BUNGIE_CLIENT_ID, | ||
clientSecret: process.env.BUNGIE_SECRET, | ||
apiKey: process.env.BUNGIE_API_KEY | ||
}), | ||
} | ||
... | ||
``` | ||
|
||
## Instructions | ||
|
||
### Configuration | ||
|
||
:::tip | ||
Bungie require all sites to run HTTPS (including local development instances). | ||
::: | ||
|
||
:::tip | ||
Bungie doesn't allow you to use localhost as the website URL, instead you need to use https://127.0.0.1:3000 | ||
::: | ||
|
||
Navigate to https://www.bungie.net/en/Application and fill in the required details: | ||
|
||
* Application name | ||
* Application Status | ||
* Website | ||
* OAuth Client Type | ||
- Confidential | ||
* Redirect URL | ||
- https://localhost:3000/api/auth/callback/bungie | ||
* Scope | ||
- `Access items like your Bungie.net notifications, memberships, and recent Bungie.Net forum activity.` | ||
* Origin Header | ||
|
||
The following guide may be helpful: | ||
|
||
* [How to setup localhost with HTTPS with a Next.js app](https://medium.com/@anMagpie/secure-your-local-development-server-with-https-next-js-81ac6b8b3d68) | ||
|
||
### Example server | ||
|
||
You will need to edit your host file and point your site at `127.0.0.1` | ||
|
||
[How to edit my host file?](https://phoenixnap.com/kb/how-to-edit-hosts-file-in-windows-mac-or-linux) | ||
|
||
On Windows (Run Powershell as administrator) | ||
|
||
```ps | ||
Add-Content -Path C:\Windows\System32\drivers\etc\hosts -Value "127.0.0.1`tdev.example.com" -Force | ||
``` | ||
|
||
``` | ||
127.0.0.1 dev.example.com | ||
``` | ||
|
||
#### Create certificate | ||
|
||
|
||
Creating a certificate for localhost is easy with openssl . Just put the following command in the terminal. The output will be two files: localhost.key and localhost.crt. | ||
|
||
```bash | ||
openssl req -x509 -out localhost.crt -keyout localhost.key \ | ||
-newkey rsa:2048 -nodes -sha256 \ | ||
-subj '/CN=localhost' -extensions EXT -config <( \ | ||
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth") | ||
``` | ||
|
||
:::tip | ||
**Windows** | ||
|
||
The OpenSSL executable is distributed with [Git](https://git-scm.com/download/win]9) for Windows. | ||
Once installed you will find the openssl.exe file in `C:/Program Files/Git/mingw64/bin` which you can add to the system PATH environment variable if it’s not already done. | ||
|
||
Add environment variable `OPENSSL_CONF=C:/Program Files/Git/mingw64/ssl/openssl.cnf` | ||
|
||
```bash | ||
req -x509 -out localhost.crt -keyout localhost.key \ | ||
-newkey rsa:2048 -nodes -sha256 \ | ||
-subj '/CN=localhost' | ||
``` | ||
|
||
::: | ||
|
||
Create directory `certificates` and place `localhost.key` and `localhost.crt` | ||
|
||
|
||
You can create a `server.js` in the root of your project and run it with `node server.js` to test Sign in with Bungie integration locally: | ||
|
||
|
||
```js | ||
const { createServer } = require('https') | ||
const { parse } = require('url') | ||
const next = require('next') | ||
const fs = require('fs') | ||
|
||
const dev = process.env.NODE_ENV !== 'production' | ||
const app = next({ dev }) | ||
const handle = app.getRequestHandler() | ||
|
||
const httpsOptions = { | ||
key: fs.readFileSync('./certificates/localhost.key'), | ||
cert: fs.readFileSync('./certificates/localhost.crt') | ||
} | ||
|
||
app.prepare().then(() => { | ||
createServer(httpsOptions, (req, res) => { | ||
const parsedUrl = parse(req.url, true) | ||
handle(req, res, parsedUrl) | ||
}).listen(3000, err => { | ||
if (err) throw err | ||
console.log('> Ready on https://localhost:3000') | ||
}) | ||
}) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters