UNPKG

@rnaga/wp-node

Version:

👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**

174 lines (173 loc) • 7.05 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserSelfRegistrationUtil = void 0; const config_1 = require("../../config"); const constants_1 = require("../../constants"); const component_1 = require("../../decorators/component"); const options_trx_1 = require("../../transactions/options.trx"); const signup_trx_1 = require("../../transactions/signup.trx"); const user_trx_1 = require("../../transactions/user.trx"); const components_1 = require("../components"); const logger_1 = require("../logger"); const options_1 = require("../options"); const vars_1 = require("../vars"); const query_util_1 = require("./query.util"); const signup_util_1 = require("./signup.util"); const user_util_1 = require("./user.util"); let UserSelfRegistrationUtil = class UserSelfRegistrationUtil { config; components; signupUtil; signupTrx; options; optionsTrx; userTrx; userUtil; vars; logger; constructor(config, components, signupUtil, signupTrx, options, optionsTrx, userTrx, userUtil, vars, logger) { this.config = config; this.components = components; this.signupUtil = signupUtil; this.signupTrx = signupTrx; this.options = options; this.optionsTrx = optionsTrx; this.userTrx = userTrx; this.userUtil = userUtil; this.vars = vars; this.logger = logger; } async canSignup() { if (this.config.isMultiSite()) { // If the site is multisite, check if the registration type is 'all' or 'user' in signup table return await this.signupUtil.canUserSignup(); } // For single site, check 'users_can_register' option in options table // See get_option( 'users_can_register' ) in wp-login.php return (parseInt((await this.options.get("users_can_register")) ?? "0") === 1); } async changeEligibility(enable) { if (this.config.isMultiSite()) { // If the site is multisite, update the registration type in signup table return await this.signupTrx.changeUserSignupEligibility(enable); } // For single site, update 'users_can_register' option in options table return await this.optionsTrx.update("users_can_register", enable ? 1 : 0); } /** * Register a new user * * Multisite: create a new record in the signup table along with activation key * Single site: create a new user in the users table along with activation key * * After this gets called, "activate" should be called to validate activation key and activate the user. * * @param userLogin - Username * @param email - Email * @returns number - New user ID */ async registerNew(userLogin, email) { if (!(await this.canSignup())) { throw new Error("User registration is not allowed."); } let id; // Multi-site if (this.config.isMultiSite()) { const [success, error] = await this.signupUtil.validateUser(userLogin, email); if (!success) { throw new Error(error); } id = await this.signupTrx.insert({ type: "user", user: userLogin, user_email: email, }); } else { // Single site id = await this.userTrx.registerNew(userLogin, email); } if (!id) { throw new Error("Could not create user"); } const activationKey = await this.getActivationKey(userLogin, email); if (!activationKey) { throw new Error("Could not create activation key"); } const context = this.vars.CONTEXT; context.hooks.action.do("core_register_new_user", activationKey, userLogin, email, context); return { id, userLogin, email, activationKey, }; } // This works only after registerNew is called async getActivationKey(userLogin, email) { const queryUtil = this.components.get(query_util_1.QueryUtil); if (this.config.isMultiSite()) { const signups = await queryUtil.common("signups", (query) => { query .where("user_login", userLogin) .where("user_email", email) .builder.limit(1); }); return signups?.[0].activation_key; } return await this.userUtil.getPasswordResetKey(userLogin); } async activate(activationKey, userRef) { let userId = 0; let success = false; if (this.config.isMultiSite()) { const result = await this.signupTrx.activate(activationKey, { userRef, }); userId = result.user_id; success = result.user_id > 0; } else { const userIdOrFalse = await this.userUtil.checkPasswordResetKey(activationKey, userRef); success = false !== userIdOrFalse && userIdOrFalse > 0; if (success) { userId = userIdOrFalse; } } if (!success) { this.logger.error("Could not activate user", { userRef }); return [false, "Could not activate user"]; } // Attach default role const defaultRole = await this.options.get("default_role"); await this.userTrx.upsertRole(userId, defaultRole); // Account activated. Generate reset key for user to set password const resetKey = await this.userUtil.getPasswordResetKey(userRef, { registration: true, }); return [true, resetKey]; } }; exports.UserSelfRegistrationUtil = UserSelfRegistrationUtil; exports.UserSelfRegistrationUtil = UserSelfRegistrationUtil = __decorate([ (0, component_1.component)({ scope: constants_1.Scope.Transient }), __metadata("design:paramtypes", [config_1.Config, components_1.Components, signup_util_1.SignupUtil, signup_trx_1.SignupTrx, options_1.Options, options_trx_1.OptionsTrx, user_trx_1.UserTrx, user_util_1.UserUtil, vars_1.Vars, logger_1.Logger]) ], UserSelfRegistrationUtil);