UNPKG

nocobase-plugin-casdoor

Version:

Integrated Casdoor authentication system

111 lines (109 loc) 3.94 kB
/** * 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 });