mirror of
https://github.com/OpenBankProject/API-Explorer-II.git
synced 2026-02-06 10:47:04 +00:00
FEATURE: server side api
This commit is contained in:
parent
cc195ae55a
commit
3fa5e96bfe
32
server/app.ts
Normal file
32
server/app.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import 'reflect-metadata'
|
||||
import 'dotenv/config'
|
||||
import session from 'express-session'
|
||||
import express, { Application } from 'express'
|
||||
import { useExpressServer, useContainer } from 'routing-controllers'
|
||||
import { Container } from 'typedi'
|
||||
import path from 'path'
|
||||
|
||||
const port = 8085
|
||||
const app: Application = express()
|
||||
app.use(express.json())
|
||||
app.use(
|
||||
session({
|
||||
secret: 'very secret',
|
||||
resave: false,
|
||||
saveUninitialized: true
|
||||
})
|
||||
)
|
||||
useContainer(Container)
|
||||
|
||||
const server = useExpressServer(app, {
|
||||
//routePrefix: '/api/v1',
|
||||
routePrefix: '/api',
|
||||
controllers: [path.join(__dirname + '/controllers/*.ts')],
|
||||
middlewares: [path.join(__dirname + '/middlewares/*.ts')]
|
||||
})
|
||||
|
||||
export const instance = server.listen(port)
|
||||
|
||||
console.log('Server running at http://localhost:' + port)
|
||||
|
||||
export default app
|
||||
14
server/controllers/CallbackController.ts
Normal file
14
server/controllers/CallbackController.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { Controller, Req, Res, Get, UseBefore } from 'routing-controllers'
|
||||
import { Request, Response } from 'express'
|
||||
import { Service } from 'typedi'
|
||||
import OauthAccessTokenMiddleware from '../middlewares/OauthAccessTokenMiddleware'
|
||||
|
||||
@Service()
|
||||
@Controller()
|
||||
@UseBefore(OauthAccessTokenMiddleware)
|
||||
export default class CallbackController {
|
||||
@Get('/callback')
|
||||
callback(@Req() request: Request, @Res() response: Response): Response {
|
||||
return response
|
||||
}
|
||||
}
|
||||
14
server/controllers/ConnectController.ts
Normal file
14
server/controllers/ConnectController.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { Controller, Req, Res, Get, UseBefore } from 'routing-controllers'
|
||||
import { Request, Response } from 'express'
|
||||
import OauthRequestTokenMiddleware from '../middlewares/OauthRequestTokenMiddleware'
|
||||
import { Service } from 'typedi'
|
||||
|
||||
@Service()
|
||||
@Controller()
|
||||
@UseBefore(OauthRequestTokenMiddleware)
|
||||
export class ConnectController {
|
||||
@Get('/connect')
|
||||
connect(@Req() request: Request, @Res() response: Response): Response {
|
||||
return response
|
||||
}
|
||||
}
|
||||
12
server/controllers/UserController.ts
Normal file
12
server/controllers/UserController.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Controller, Req, Res, Get } from 'routing-controllers'
|
||||
import { Request, Response } from 'express'
|
||||
import { Service } from 'typedi'
|
||||
|
||||
@Controller()
|
||||
@Service()
|
||||
export default class UserController {
|
||||
@Get('/user')
|
||||
getUser(@Req() request: Request, @Res() response: Response): Response {
|
||||
return response.json('User list.')
|
||||
}
|
||||
}
|
||||
30
server/middlewares/OauthAccessTokenMiddleware.ts
Normal file
30
server/middlewares/OauthAccessTokenMiddleware.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { ExpressMiddlewareInterface } from 'routing-controllers'
|
||||
import { Response, Request } from 'express'
|
||||
import { Service } from 'typedi'
|
||||
import OauthInjectedService from '../services/OauthInjectedService'
|
||||
|
||||
@Service()
|
||||
export default class OauthAccessTokenMiddleware implements ExpressMiddlewareInterface {
|
||||
constructor(private oauthInjectedService: OauthInjectedService) {}
|
||||
|
||||
use(request: Request, response: Response): any {
|
||||
const oauthService = this.oauthInjectedService
|
||||
const consumer = oauthService.getConsumer()
|
||||
const oauthVerifier = request.query.oauth_verifier
|
||||
consumer.getOAuthAccessToken(
|
||||
oauthService.requestTokenKey,
|
||||
oauthService.requestTokenSecret,
|
||||
oauthVerifier,
|
||||
(error: any, oauthTokenKey: string, oauthTokenSecret: string) => {
|
||||
if (error) {
|
||||
console.log(error)
|
||||
response.status(500).send('Error getting OAuth access token: ' + error)
|
||||
} else {
|
||||
response.redirect(
|
||||
process.env.VITE_HOST + '?accessKey=' + oauthTokenKey + '&secret=' + oauthTokenSecret
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
25
server/middlewares/OauthRequestTokenMiddleware.ts
Normal file
25
server/middlewares/OauthRequestTokenMiddleware.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { ExpressMiddlewareInterface } from 'routing-controllers'
|
||||
import { Response, Request } from 'express'
|
||||
import { Service } from 'typedi'
|
||||
import OauthInjectedService from '../services/OauthInjectedService'
|
||||
|
||||
@Service()
|
||||
export default class OauthRequestTokenMiddleware implements ExpressMiddlewareInterface {
|
||||
constructor(private oauthInjectedService: OauthInjectedService) {}
|
||||
|
||||
use(request: Request, response: Response): any {
|
||||
const apiHost = process.env.VITE_API_HOST
|
||||
const oauthService = this.oauthInjectedService
|
||||
const consumer = oauthService.getConsumer()
|
||||
consumer.getOAuthRequestToken((error: any, oauthTokenKey: string, oauthTokenSecret: string) => {
|
||||
if (error) {
|
||||
console.error(error)
|
||||
response.status(500).send('Error getting OAuth request token: ' + error)
|
||||
} else {
|
||||
oauthService.requestTokenKey = oauthTokenKey
|
||||
oauthService.requestTokenSecret = oauthTokenSecret
|
||||
response.redirect(apiHost + '/oauth/authorize?oauth_token=' + oauthTokenKey)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
28
server/services/OauthInjectedService.ts
Normal file
28
server/services/OauthInjectedService.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { Service } from 'typedi'
|
||||
import oauth from 'oauth'
|
||||
|
||||
@Service()
|
||||
export default class OauthInjectedService {
|
||||
public requestTokenKey: string
|
||||
public requestTokenSecret: string
|
||||
private oauth: oauth.OAuth
|
||||
constructor() {
|
||||
const apiHost = process.env.VITE_API_HOST
|
||||
const consumerKey = process.env.VITE_CONSUMER_KEY
|
||||
const consumerSecret = process.env.VITE_CONSUMER_SECRET
|
||||
const redirectUrl = process.env.VITE_REDIRECT_URL
|
||||
this.oauth = new oauth.OAuth(
|
||||
apiHost + '/oauth/initiate',
|
||||
apiHost + '/oauth/token',
|
||||
consumerKey,
|
||||
consumerSecret,
|
||||
'1.0',
|
||||
redirectUrl,
|
||||
'HMAC-SHA1'
|
||||
)
|
||||
}
|
||||
|
||||
getConsumer(): oauth.OAuth {
|
||||
return this.oauth
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user