[web] Issue Oauth2 access tokens (#12788)

* [web] Issue Oauth2 access tokens

* [web] Add partial index for `oauthAccessTokens.user_id` for Personal Access Tokens

* [web] script to create personal access tokens

GitOrigin-RevId: 796e8d23a6799a87ac6096c686139c6290668b83
This commit is contained in:
Miguel Serrano 2023-04-27 12:22:29 +02:00 committed by Copybot
parent 77da9fd0cd
commit d2172e5179
3 changed files with 58 additions and 0 deletions

View file

@ -6,13 +6,17 @@ const { ObjectId } = Schema
const OauthAccessTokenSchema = new Schema(
{
accessToken: String,
accessTokenPartial: String,
type: String,
accessTokenExpiresAt: Date,
oauthApplication_id: { type: ObjectId, ref: 'OauthApplication' },
refreshToken: String,
refreshTokenExpiresAt: Date,
scope: String,
user_id: { type: ObjectId, ref: 'User' },
createdAt: { type: Date },
expiresAt: Date,
lastUsedAt: Date,
},
{
collection: 'oauthAccessTokens',

View file

@ -0,0 +1,21 @@
const Helpers = require('./lib/helpers')
exports.tags = ['server-ce', 'server-pro', 'saas']
const indexes = [
{
key: { user_id: 1 },
name: 'pat_user_id_1',
partialFilterExpression: { type: 'pat' },
},
]
exports.migrate = async client => {
const { db } = client
await Helpers.addIndexesToCollection(db.oauthAccessTokens, indexes)
}
exports.rollback = async client => {
const { db } = client
await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, indexes)
}

View file

@ -0,0 +1,33 @@
// Script to create a Personal Access Token for a given user
// Example:
// node scripts/create_oauth_personal_access_token.js --user-id=643e5b240dc50c83b5bf1127
const parseArgs = require('minimist')
const { waitForDb } = require('../app/src/infrastructure/mongodb')
const OAuthPersonalAccessTokenManager = require('../modules/oauth2-server/app/src/OAuthPersonalAccessTokenManager')
const argv = parseArgs(process.argv.slice(2), {
string: ['user-id'],
})
const userId = argv['user-id']
if (!userId) {
console.error('Missing --user-id argument')
process.exit(1)
}
async function createPersonalAccessToken() {
await waitForDb()
const accessToken = await OAuthPersonalAccessTokenManager.createToken(userId)
console.log('Personal Access Token: ' + accessToken)
}
createPersonalAccessToken()
.then(() => {
process.exit()
})
.catch(err => {
console.error(err)
process.exit(1)
})