Skip to content

Commit

Permalink
fix: tenantid in config functions (#627)
Browse files Browse the repository at this point in the history
* fix: passwordless

* fix: password reset in tpep

* fix: rename functions

* fix: tenantId in types

* fix: tenantId in types

* fix: impl

* fix: impl

* fix: pr comments

* fix: minor

* Update lib/ts/recipe/emailpassword/utils.ts

* Update lib/ts/recipe/emailverification/utils.ts

* Update lib/ts/recipe/passwordless/utils.ts

* Update lib/ts/recipe/thirdpartyemailpassword/utils.ts

* Update lib/ts/recipe/thirdpartypasswordless/utils.ts

---------

Co-authored-by: Rishabh Poddar <rishabh.poddar@gmail.com>
  • Loading branch information
sattvikc and rishabhpoddar authored Jul 7, 2023
1 parent a245170 commit 2450c61
Show file tree
Hide file tree
Showing 82 changed files with 763 additions and 1,339 deletions.
4 changes: 2 additions & 2 deletions lib/build/recipe/dashboard/api/userdetails/userPasswordPut.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ const userPasswordPut = (_, tenantId, options, userContext) =>
let passwordFormFields = recipe_1.default
.getInstanceOrThrowError()
.config.signUpFeature.formFields.filter((field) => field.id === constants_1.FORM_FIELD_PASSWORD_ID);
let passwordValidationError = yield passwordFormFields[0].validate(newPassword);
let passwordValidationError = yield passwordFormFields[0].validate(newPassword, tenantId);
if (passwordValidationError !== undefined) {
return {
status: "INVALID_PASSWORD_ERROR",
Expand Down Expand Up @@ -111,7 +111,7 @@ const userPasswordPut = (_, tenantId, options, userContext) =>
let passwordFormFields = recipe_2.default
.getInstanceOrThrowError()
.config.signUpFeature.formFields.filter((field) => field.id === constants_1.FORM_FIELD_PASSWORD_ID);
let passwordValidationError = yield passwordFormFields[0].validate(newPassword);
let passwordValidationError = yield passwordFormFields[0].validate(newPassword, tenantId);
if (passwordValidationError !== undefined) {
return {
status: "INVALID_PASSWORD_ERROR",
Expand Down
2 changes: 1 addition & 1 deletion lib/build/recipe/dashboard/api/userdetails/userPut.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ declare type Response =
};
export declare const userPut: (
_: APIInterface,
___: string,
tenantId: string,
options: APIOptions,
userContext: any
) => Promise<Response>;
Expand Down
20 changes: 11 additions & 9 deletions lib/build/recipe/dashboard/api/userdetails/userPut.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ const recipe_5 = __importDefault(require("../../../usermetadata/recipe"));
const usermetadata_1 = __importDefault(require("../../../usermetadata"));
const constants_1 = require("../../../emailpassword/constants");
const utils_2 = require("../../../passwordless/utils");
const updateEmailForRecipeId = (recipeId, userId, email, userContext) =>
const updateEmailForRecipeId = (recipeId, userId, email, tenantId, userContext) =>
__awaiter(void 0, void 0, void 0, function* () {
if (recipeId === "emailpassword") {
let emailFormFields = recipe_1.default
.getInstanceOrThrowError()
.config.signUpFeature.formFields.filter((field) => field.id === constants_1.FORM_FIELD_EMAIL_ID);
let validationError = yield emailFormFields[0].validate(email);
let validationError = yield emailFormFields[0].validate(email, tenantId);
if (validationError !== undefined) {
return {
status: "INVALID_EMAIL_ERROR",
Expand All @@ -82,7 +82,7 @@ const updateEmailForRecipeId = (recipeId, userId, email, userContext) =>
let emailFormFields = recipe_2.default
.getInstanceOrThrowError()
.config.signUpFeature.formFields.filter((field) => field.id === constants_1.FORM_FIELD_EMAIL_ID);
let validationError = yield emailFormFields[0].validate(email);
let validationError = yield emailFormFields[0].validate(email, tenantId);
if (validationError !== undefined) {
return {
status: "INVALID_EMAIL_ERROR",
Expand Down Expand Up @@ -117,7 +117,7 @@ const updateEmailForRecipeId = (recipeId, userId, email, userContext) =>
validationError = validationResult;
}
} else {
const validationResult = yield passwordlessConfig.validateEmailAddress(email);
const validationResult = yield passwordlessConfig.validateEmailAddress(email, tenantId);
if (validationResult !== undefined) {
isValidEmail = false;
validationError = validationResult;
Expand Down Expand Up @@ -157,7 +157,7 @@ const updateEmailForRecipeId = (recipeId, userId, email, userContext) =>
validationError = validationResult;
}
} else {
const validationResult = yield passwordlessConfig.validateEmailAddress(email);
const validationResult = yield passwordlessConfig.validateEmailAddress(email, tenantId);
if (validationResult !== undefined) {
isValidEmail = false;
validationError = validationResult;
Expand Down Expand Up @@ -191,7 +191,7 @@ const updateEmailForRecipeId = (recipeId, userId, email, userContext) =>
*/
throw new Error("Should never come here");
});
const updatePhoneForRecipeId = (recipeId, userId, phone, userContext) =>
const updatePhoneForRecipeId = (recipeId, userId, phone, tenantId, userContext) =>
__awaiter(void 0, void 0, void 0, function* () {
if (recipeId === "passwordless") {
let isValidPhone = true;
Expand All @@ -204,7 +204,7 @@ const updatePhoneForRecipeId = (recipeId, userId, phone, userContext) =>
validationError = validationResult;
}
} else {
const validationResult = yield passwordlessConfig.validatePhoneNumber(phone);
const validationResult = yield passwordlessConfig.validatePhoneNumber(phone, tenantId);
if (validationResult !== undefined) {
isValidPhone = false;
validationError = validationResult;
Expand Down Expand Up @@ -244,7 +244,7 @@ const updatePhoneForRecipeId = (recipeId, userId, phone, userContext) =>
validationError = validationResult;
}
} else {
const validationResult = yield passwordlessConfig.validatePhoneNumber(phone);
const validationResult = yield passwordlessConfig.validatePhoneNumber(phone, tenantId);
if (validationResult !== undefined) {
isValidPhone = false;
validationError = validationResult;
Expand Down Expand Up @@ -278,7 +278,7 @@ const updatePhoneForRecipeId = (recipeId, userId, phone, userContext) =>
*/
throw new Error("Should never come here");
});
const userPut = (_, ___, options, userContext) =>
const userPut = (_, tenantId, options, userContext) =>
__awaiter(void 0, void 0, void 0, function* () {
const requestBody = yield options.req.getJSONBody();
const userId = requestBody.userId;
Expand Down Expand Up @@ -357,6 +357,7 @@ const userPut = (_, ___, options, userContext) =>
userResponse.recipe,
userId,
email.trim(),
tenantId,
userContext
);
if (emailUpdateResponse.status !== "OK") {
Expand All @@ -368,6 +369,7 @@ const userPut = (_, ___, options, userContext) =>
userResponse.recipe,
userId,
phone.trim(),
tenantId,
userContext
);
if (phoneUpdateResponse.status !== "OK") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ function generatePasswordResetToken(apiImplementation, tenantId, options, userCo
// step 1
let formFields = yield utils_2.validateFormFieldsOrThrowError(
options.config.resetPasswordUsingTokenFeature.formFieldsForGenerateTokenForm,
(yield options.req.getJSONBody()).formFields
(yield options.req.getJSONBody()).formFields,
tenantId
);
let result = yield apiImplementation.generatePasswordResetTokenPOST({
formFields,
Expand Down
3 changes: 2 additions & 1 deletion lib/build/recipe/emailpassword/api/passwordReset.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ function passwordReset(apiImplementation, tenantId, options, userContext) {
// step 1
let formFields = yield utils_2.validateFormFieldsOrThrowError(
options.config.resetPasswordUsingTokenFeature.formFieldsForPasswordResetForm,
(yield options.req.getJSONBody()).formFields
(yield options.req.getJSONBody()).formFields,
tenantId
);
let token = (yield options.req.getJSONBody()).token;
if (token === undefined) {
Expand Down
3 changes: 2 additions & 1 deletion lib/build/recipe/emailpassword/api/signin.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ function signInAPI(apiImplementation, tenantId, options, userContext) {
// step 1
let formFields = yield utils_2.validateFormFieldsOrThrowError(
options.config.signInFeature.formFields,
(yield options.req.getJSONBody()).formFields
(yield options.req.getJSONBody()).formFields,
tenantId
);
let result = yield apiImplementation.signInPOST({
formFields,
Expand Down
3 changes: 2 additions & 1 deletion lib/build/recipe/emailpassword/api/signup.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ function signUpAPI(apiImplementation, tenantId, options, userContext) {
// step 1
let formFields = yield utils_2.validateFormFieldsOrThrowError(
options.config.signUpFeature.formFields,
(yield options.req.getJSONBody()).formFields
(yield options.req.getJSONBody()).formFields,
tenantId
);
let result = yield apiImplementation.signUpPOST({
formFields,
Expand Down
3 changes: 2 additions & 1 deletion lib/build/recipe/emailpassword/api/utils.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
import { NormalisedFormField } from "../types";
export declare function validateFormFieldsOrThrowError(
configFormFields: NormalisedFormField[],
formFieldsRaw: any
formFieldsRaw: any,
tenantId: string
): Promise<
{
id: string;
Expand Down
8 changes: 4 additions & 4 deletions lib/build/recipe/emailpassword/api/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.validateFormFieldsOrThrowError = void 0;
const error_1 = __importDefault(require("../error"));
const constants_1 = require("../constants");
function validateFormFieldsOrThrowError(configFormFields, formFieldsRaw) {
function validateFormFieldsOrThrowError(configFormFields, formFieldsRaw, tenantId) {
return __awaiter(this, void 0, void 0, function* () {
// first we check syntax ----------------------------
if (formFieldsRaw === undefined) {
Expand Down Expand Up @@ -67,7 +67,7 @@ function validateFormFieldsOrThrowError(configFormFields, formFieldsRaw) {
return field;
});
// then run validators through them-----------------------
yield validateFormOrThrowError(formFields, configFormFields);
yield validateFormOrThrowError(formFields, configFormFields, tenantId);
return formFields;
});
}
Expand All @@ -80,7 +80,7 @@ function newBadRequestError(message) {
}
// We check that the number of fields in input and config form field is the same.
// We check that each item in the config form field is also present in the input form field
function validateFormOrThrowError(inputs, configFormFields) {
function validateFormOrThrowError(inputs, configFormFields, tenantId) {
return __awaiter(this, void 0, void 0, function* () {
let validationErrors = [];
if (configFormFields.length !== inputs.length) {
Expand All @@ -99,7 +99,7 @@ function validateFormOrThrowError(inputs, configFormFields) {
});
} else {
// Otherwise, use validate function.
const error = yield field.validate(input.value);
const error = yield field.validate(input.value, tenantId);
// If error, add it.
if (error !== undefined) {
validationErrors.push({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
// @ts-nocheck
import { TypeEmailPasswordEmailDeliveryInput, User, RecipeInterface } from "../../../types";
import { TypeEmailPasswordEmailDeliveryInput, RecipeInterface } from "../../../types";
import { NormalisedAppinfo } from "../../../../../types";
import { EmailDeliveryInterface } from "../../../../../ingredients/emaildelivery/types";
export default class BackwardCompatibilityService
implements EmailDeliveryInterface<TypeEmailPasswordEmailDeliveryInput> {
private recipeInterfaceImpl;
private isInServerlessEnv;
private appInfo;
private resetPasswordUsingTokenFeature;
constructor(
recipeInterfaceImpl: RecipeInterface,
appInfo: NormalisedAppinfo,
isInServerlessEnv: boolean,
resetPasswordUsingTokenFeature?: {
createAndSendCustomEmail?: (
user: User,
passwordResetURLWithToken: string,
userContext: any
) => Promise<void>;
}
);
constructor(recipeInterfaceImpl: RecipeInterface, appInfo: NormalisedAppinfo, isInServerlessEnv: boolean);
sendEmail: (
input: TypeEmailPasswordEmailDeliveryInput & {
userContext: any;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ var __awaiter =
Object.defineProperty(exports, "__esModule", { value: true });
const passwordResetFunctions_1 = require("../../../passwordResetFunctions");
class BackwardCompatibilityService {
constructor(recipeInterfaceImpl, appInfo, isInServerlessEnv, resetPasswordUsingTokenFeature) {
constructor(recipeInterfaceImpl, appInfo, isInServerlessEnv) {
this.sendEmail = (input) =>
__awaiter(this, void 0, void 0, function* () {
let user = yield this.recipeInterfaceImpl.getUserById({
Expand All @@ -49,36 +49,22 @@ class BackwardCompatibilityService {
user.email = input.user.email;
try {
if (!this.isInServerlessEnv) {
this.resetPasswordUsingTokenFeature
.createAndSendCustomEmail(user, input.passwordResetLink, input.userContext)
passwordResetFunctions_1
.createAndSendEmailUsingSupertokensService(this.appInfo, user, input.passwordResetLink)
.catch((_) => {});
} else {
// see https://github.com/supertokens/supertokens-node/pull/135
yield this.resetPasswordUsingTokenFeature.createAndSendCustomEmail(
yield passwordResetFunctions_1.createAndSendEmailUsingSupertokensService(
this.appInfo,
user,
input.passwordResetLink,
input.userContext
input.passwordResetLink
);
}
} catch (_) {}
});
this.recipeInterfaceImpl = recipeInterfaceImpl;
this.isInServerlessEnv = isInServerlessEnv;
this.appInfo = appInfo;
{
let inputCreateAndSendCustomEmail =
resetPasswordUsingTokenFeature === null || resetPasswordUsingTokenFeature === void 0
? void 0
: resetPasswordUsingTokenFeature.createAndSendCustomEmail;
this.resetPasswordUsingTokenFeature =
inputCreateAndSendCustomEmail !== undefined
? {
createAndSendCustomEmail: inputCreateAndSendCustomEmail,
}
: {
createAndSendCustomEmail: passwordResetFunctions_1.createAndSendCustomEmail(this.appInfo),
};
}
}
}
exports.default = BackwardCompatibilityService;
1 change: 1 addition & 0 deletions lib/build/recipe/emailpassword/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export default class Wrapper {
password?: string;
userContext?: any;
applyPasswordPolicy?: boolean;
tenantIdForPasswordPolicy?: string;
}): Promise<
| {
status: "OK" | "UNKNOWN_USER_ID_ERROR" | "EMAIL_ALREADY_EXISTS_ERROR";
Expand Down
11 changes: 8 additions & 3 deletions lib/build/recipe/emailpassword/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,14 @@ class Wrapper {
});
}
static updateEmailOrPassword(input) {
return recipe_1.default
.getInstanceOrThrowError()
.recipeInterfaceImpl.updateEmailOrPassword(Object.assign({ userContext: {} }, input));
return recipe_1.default.getInstanceOrThrowError().recipeInterfaceImpl.updateEmailOrPassword(
Object.assign(Object.assign({ userContext: {} }, input), {
tenantIdForPasswordPolicy:
input.tenantIdForPasswordPolicy === undefined
? constants_1.DEFAULT_TENANT_ID
: input.tenantIdForPasswordPolicy,
})
);
}
static createResetPasswordLink(userId, tenantId, userContext) {
return __awaiter(this, void 0, void 0, function* () {
Expand Down
8 changes: 5 additions & 3 deletions lib/build/recipe/emailpassword/passwordResetFunctions.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// @ts-nocheck
import { User } from "./types";
import { NormalisedAppinfo } from "../../types";
export declare function createAndSendCustomEmail(
appInfo: NormalisedAppinfo
): (user: User, passwordResetURLWithToken: string) => Promise<void>;
export declare function createAndSendEmailUsingSupertokensService(
appInfo: NormalisedAppinfo,
user: User,
passwordResetURLWithToken: string
): Promise<void>;
Loading

0 comments on commit 2450c61

Please sign in to comment.