Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions forge/db/migrations/20251006-01-fix-sso-group-type.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* Change column type
*/

const { DataTypes } = require('sequelize')

module.exports = {
up: async (context, Sequelize) => {
const dialect = context.sequelize.options.dialect
if (dialect === 'sqlite') {
const sqlFind = "select sql from SQLITE_MASTER where name = 'Users' and type = 'table';"
const [results] = await context.sequelize.query(sqlFind)
if (results.length === 0) {
return // Nothing to do
}

// Check if the DDL is as expected already
const ddl = results[0].sql
const re = /(`SSOGroups`[^,]+?VARCHAR\(255\))/.exec(ddl)
if (!re || re.length < 2) {
return // Nothing to do
}

// create new column definition
const currentColDef = re[1]
const newColDef = currentColDef.replace('VARCHAR(255)', 'TEXT')

// update the table with the new column definition
await context.sequelize.query('pragma writable_schema=1;')
const sqlUpdate = `update SQLITE_MASTER set sql = replace(sql, '${currentColDef}', '${newColDef}') where name = 'Users' and type = 'table';`
context.sequelize.query(sqlUpdate)
await context.sequelize.query('pragma writable_schema=0;')
} else {
// This will trigger the User delete actions on SQLITE
await context.changeColumn('Users', 'SSOGroups', {
type: DataTypes.TEXT,
allowNull: true
})
}
},
down: async (useContext, Sequelize) => {
}
}
2 changes: 1 addition & 1 deletion forge/db/models/User.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ module.exports = {
defaultValue: false
},
SSOGroups: {
type: DataTypes.STRING,
type: DataTypes.TEXT,
allowNull: true,
get () {
const rawValue = this.getDataValue('SSOGroups')
Expand Down
18 changes: 11 additions & 7 deletions forge/ee/routes/sso/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,17 @@ module.exports = fp(async function (app, opts) {
return
}
}
if (providerOpts.exposeGroups) {
// get SAML groups
user.SSOGroups = app.sso.getUserGroups(samlUser, user, providerOpts)
await user.save()
} else {
user.SSOGroups = null
await user.save()
try {
if (providerOpts.exposeGroups) {
// get SAML groups
user.SSOGroups = app.sso.getUserGroups(samlUser, user, providerOpts)
await user.save()
} else {
user.SSOGroups = null
await user.save()
}
} catch (err) {
app.log.error(`SAML SSOGroups error: ${err.toString()} ${err.stack}`)
}
done(null, user)
} else {
Expand Down
Loading