nocobase-plugin-casdoor
Version:
Integrated Casdoor authentication system
111 lines (109 loc) • 3.94 kB
JavaScript
/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var CasdoorAuth_exports = {};
__export(CasdoorAuth_exports, {
CasdoorAuth: () => CasdoorAuth
});
module.exports = __toCommonJS(CasdoorAuth_exports);
var import_auth = require("@nocobase/auth");
var import_casdoorOauth = require("../openapi/casdoorOauth");
class CasdoorAuth extends import_auth.BaseAuth {
#authConfigOptions;
#sdk;
constructor(config) {
var _a;
const userCollection = config.ctx.db.getCollection("users");
super({ ...config, userCollection });
this.#authConfigOptions = {
public: { ...config.options.public },
internal: { ...config.options.internal }
};
this.#authConfigOptions.internal.emailDomains = ((_a = config.options.internal.emailDomain) == null ? void 0 : _a.split("s*,s*")) || [];
this.#sdk = new import_casdoorOauth.CasdoorOAuthSdk({
client_id: this.#authConfigOptions.internal.clientId,
client_secret: this.#authConfigOptions.internal.clientSecret,
endpoint: this.#authConfigOptions.internal.endpoint
});
}
async validate() {
var _a, _b;
const { authenticator: authenticatorName, code } = this.ctx.action.params;
if (!authenticatorName) {
this.ctx.throw(400, "\u8BA4\u8BC1\u5668\u4E0D\u80FD\u4E3A\u7A7A");
}
console.log("aaaaa1");
const accessToken = await this.#sdk.getAccessToken(code);
console.log("aaaaa2");
const sdkUser = await this.#sdk.getUserInfo(accessToken);
console.log("aaaaa3", sdkUser);
const userId = sdkUser.id;
const authenticator = this.authenticator;
const au = await authenticator.findUser(userId);
if (au) {
return au;
}
if (!sdkUser.email) {
this.ctx.throw(400, "\u7528\u6237\u90AE\u7BB1\u672A\u914D\u7F6E");
}
if (!this.#authConfigOptions.internal.emailDomains.some((a) => sdkUser.email.endsWith(a))) {
this.ctx.throw(400, `\u90AE\u7BB1\u57DF\u540D\u672A\u542F\u7528 ${sdkUser.email}`);
}
const user = {
userId,
email: sdkUser.email,
name: sdkUser.name || sdkUser.email,
orgEmail: sdkUser.email
};
const filter = {
email: sdkUser.email
};
const ncUser = await this.userRepository.findOne({ filter });
if (ncUser) {
await this.authenticator.addUser(ncUser, {
through: {
uuid: userId
}
});
return await authenticator.findUser(userId);
}
if (this.#authConfigOptions.public.autoSignup) {
return await authenticator.newUser(userId, {
nickname: user.name,
username: ((_b = (_a = filter.email) == null ? void 0 : _a.split("@")) == null ? void 0 : _b[0]) || userId,
email: filter.email,
meta: JSON.stringify(user)
});
}
return null;
}
get sdk() {
return this.#sdk;
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
CasdoorAuth
});