feat: import users from v1 - db + create users
This commit is contained in:
@@ -84,6 +84,56 @@ module.exports = {
|
||||
} catch (err) {
|
||||
return graphHelper.generateError(err)
|
||||
}
|
||||
},
|
||||
async importUsersFromV1(obj, args, context) {
|
||||
try {
|
||||
const MongoClient = require('mongodb').MongoClient
|
||||
if (args.mongoDbConnString && args.mongoDbConnString.length > 10) {
|
||||
const client = await MongoClient.connect(args.mongoDbConnString, {
|
||||
appname: `Wiki.js ${WIKI.version} Migration Tool`
|
||||
})
|
||||
const dbUsers = client.db().collection('users')
|
||||
const userCursor = dbUsers.find({ email: { '$ne': 'guest' } })
|
||||
|
||||
let failed = []
|
||||
let usersCount = 0
|
||||
let groupsCount = 0
|
||||
|
||||
while (await userCursor.hasNext()) {
|
||||
const usr = await userCursor.next()
|
||||
try {
|
||||
await WIKI.models.users.createNewUser({
|
||||
providerKey: usr.provider,
|
||||
email: usr.email,
|
||||
name: usr.name,
|
||||
passwordRaw: usr.password,
|
||||
mustChangePassword: false,
|
||||
sendWelcomeEmail: false
|
||||
})
|
||||
usersCount++
|
||||
} catch (err) {
|
||||
failed.push({
|
||||
provider: usr.provider,
|
||||
email: usr.email,
|
||||
error: err.message
|
||||
})
|
||||
WIKI.logger.warn(`${usr.email}: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
client.close()
|
||||
return {
|
||||
responseResult: graphHelper.generateSuccess('Import completed.'),
|
||||
usersCount: usersCount,
|
||||
groupsCount: groupsCount,
|
||||
failed: failed
|
||||
}
|
||||
} else {
|
||||
throw new Error('MongoDB Connection String is missing or invalid.')
|
||||
}
|
||||
} catch (err) {
|
||||
return graphHelper.generateError(err)
|
||||
}
|
||||
}
|
||||
},
|
||||
SystemInfo: {
|
||||
|
@@ -35,6 +35,11 @@ type SystemMutation {
|
||||
): DefaultResponse @auth(requires: ["manage:system"])
|
||||
|
||||
performUpgrade: DefaultResponse @auth(requires: ["manage:system"])
|
||||
|
||||
importUsersFromV1(
|
||||
mongoDbConnString: String!
|
||||
groupMode: SystemImportUsersGroupMode!
|
||||
): SystemImportUsersResponse @auth(requires: ["manage:system"])
|
||||
}
|
||||
|
||||
# -----------------------------------------------
|
||||
@@ -73,3 +78,22 @@ type SystemInfo {
|
||||
usersTotal: Int @auth(requires: ["manage:system", "manage:navigation", "manage:groups", "write:groups", "manage:users", "write:users"])
|
||||
workingDirectory: String @auth(requires: ["manage:system"])
|
||||
}
|
||||
|
||||
enum SystemImportUsersGroupMode {
|
||||
MULTI
|
||||
SINGLE
|
||||
NONE
|
||||
}
|
||||
|
||||
type SystemImportUsersResponse {
|
||||
responseResult: ResponseStatus
|
||||
usersCount: Int
|
||||
groupsCount: Int
|
||||
failed: [SystemImportUsersResponseFailed]
|
||||
}
|
||||
|
||||
type SystemImportUsersResponseFailed {
|
||||
provider: String
|
||||
email: String
|
||||
error: String
|
||||
}
|
||||
|
Reference in New Issue
Block a user