first
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
const Router = require('koa-router')
|
||||
const r = new Router()
|
||||
const config = require('../config')
|
||||
const qs = require('querystring')
|
||||
const request = require('request')
|
||||
|
||||
r.get('/', async (c, n) => {
|
||||
await c.render('index')
|
||||
})
|
||||
|
||||
r.get('/chat_login', async (c, n) => {
|
||||
let url = config.twitch.auth_url
|
||||
|
||||
let qsObj = {
|
||||
client_id: config.twitch.client_id,
|
||||
redirect_uri: config.twitch.redirect_uri,
|
||||
response_type: 'code',
|
||||
scope: 'chat_login'
|
||||
}
|
||||
let qsStr = qs.stringify(qsObj)
|
||||
let toUrl = `${url}?${qsStr}`
|
||||
|
||||
c.redirect(toUrl)
|
||||
})
|
||||
|
||||
r.get('/login', async (c, n) => {
|
||||
let url = config.twitch.auth_url
|
||||
|
||||
let qsObj = {
|
||||
client_id: config.twitch.client_id,
|
||||
redirect_uri: config.twitch.redirect_uri,
|
||||
response_type: 'code',
|
||||
scope: 'user_read'
|
||||
}
|
||||
let qsStr = qs.stringify(qsObj)
|
||||
let toUrl = `${url}?${qsStr}`
|
||||
|
||||
c.redirect(toUrl)
|
||||
})
|
||||
|
||||
r.get('/twitch/oauth', async (c, n) => {
|
||||
let code = c.query.code || ''
|
||||
if (!code) {
|
||||
await c.render('test', {
|
||||
data: {
|
||||
msg: 'code not found'
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
let url = config.twitch.token_url
|
||||
let qsObj = {
|
||||
client_id: config.twitch.client_id,
|
||||
client_secret: config.twitch.secret,
|
||||
code,
|
||||
grant_type: 'authorization_code',
|
||||
redirect_uri: config.twitch.redirect_uri
|
||||
}
|
||||
let qsStr = qs.stringify(qsObj)
|
||||
let toUrl = `${url}?${qsStr}`
|
||||
|
||||
let body = await new Promise((resolve, reject) => {
|
||||
request.post(toUrl, (err, res, body) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
return
|
||||
}
|
||||
try {
|
||||
resolve(JSON.parse(body))
|
||||
} catch (err) {
|
||||
resolve(body)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
let opts = {
|
||||
url: 'https://api.twitch.tv/kraken/user',
|
||||
headers: {
|
||||
'Client-ID': config.twitch.client_id,
|
||||
'Authorization': 'OAuth ' + body.access_token
|
||||
},
|
||||
method: 'get'
|
||||
}
|
||||
|
||||
let userProfile = await new Promise((resolve) => {
|
||||
request(opts, (err, res, body) => {
|
||||
console.log('get profile', body)
|
||||
if (err) {
|
||||
resolve(null)
|
||||
return
|
||||
}
|
||||
resolve(body)
|
||||
})
|
||||
})
|
||||
|
||||
await c.render('test', { data: { body, userProfile } })
|
||||
})
|
||||
|
||||
module.exports = r
|
||||
Reference in New Issue
Block a user