mirror of
https://github.com/Permissionless-Software-Foundation/ipfs-bch-wallet-consumer.git
synced 2026-09-22 09:12:03 -07:00
100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
import Passport from '../../../adapters/passport.js'
|
|
const passport = new Passport()
|
|
|
|
let _this
|
|
|
|
class AuthRESTController {
|
|
constructor (localConfig = {}) {
|
|
// Dependency Injection.
|
|
this.adapters = localConfig.adapters
|
|
if (!this.adapters) {
|
|
throw new Error(
|
|
'Instance of Adapters library required when instantiating Auth REST Controller.'
|
|
)
|
|
}
|
|
this.useCases = localConfig.useCases
|
|
if (!this.useCases) {
|
|
throw new Error(
|
|
'Instance of Use Cases library required when instantiating Auth REST Controller.'
|
|
)
|
|
}
|
|
|
|
_this = this
|
|
this.passport = passport
|
|
}
|
|
|
|
/**
|
|
* @apiDefine TokenError
|
|
* @apiError Unauthorized Invalid JWT token
|
|
*
|
|
* @apiErrorExample {json} Unauthorized-Error:
|
|
* HTTP/1.1 401 Unauthorized
|
|
* {
|
|
* "status": 401,
|
|
* "error": "Unauthorized"
|
|
* }
|
|
*/
|
|
|
|
/**
|
|
* @api {post} /auth Authenticate user
|
|
* @apiName AuthUser
|
|
* @apiGroup Auth
|
|
*
|
|
* @apiParam {String} username User username.
|
|
* @apiParam {String} password User password.
|
|
*
|
|
* @apiExample Example usage:
|
|
* curl -H "Content-Type: application/json" -X POST -d '{ "username": "johndoe@gmail.com", "password": "foo" }' localhost:5000/auth
|
|
*
|
|
* @apiSuccess {Object} user User object
|
|
* @apiSuccess {ObjectId} user._id User id
|
|
* @apiSuccess {String} user.name User name
|
|
* @apiSuccess {String} user.username User username
|
|
* @apiSuccess {String} token Encoded JWT
|
|
*
|
|
* @apiSuccessExample {json} Success-Response:
|
|
* HTTP/1.1 200 OK
|
|
* {
|
|
* "user": {
|
|
* "_id": "56bd1da600a526986cf65c80"
|
|
* "username": "johndoe"
|
|
* },
|
|
* "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
|
|
* }
|
|
*
|
|
* @apiError Unauthorized Incorrect credentials
|
|
*
|
|
* @apiErrorExample {json} Error-Response:
|
|
* HTTP/1.1 401 Unauthorized
|
|
* {
|
|
* "status": 401,
|
|
* "error": "Unauthorized"
|
|
* }
|
|
*/
|
|
async authUser (ctx, next) {
|
|
try {
|
|
// Retrieve the user from the database after they've proven the correct
|
|
// password.
|
|
const user = await _this.passport.authUser(ctx, next)
|
|
if (!user) {
|
|
ctx.throw(401)
|
|
}
|
|
|
|
const token = user.generateToken()
|
|
|
|
const response = user.toJSON()
|
|
|
|
delete response.password
|
|
|
|
ctx.body = {
|
|
token,
|
|
user: response
|
|
}
|
|
} catch (err) {
|
|
ctx.throw(401)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default AuthRESTController
|