feat: import users from v1 - db + create users

This commit is contained in:
Nick
2019-09-28 22:19:33 -04:00
parent 41716e52a6
commit 82ba7d0a36
6 changed files with 399 additions and 41 deletions

View File

@@ -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: {

View File

@@ -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
}