Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,18 @@ inxtbridge_server__ssl__redirect=443
inxtbridge_redis__password=
inxtbridge_stripe__SIG_TEST=stripe_sig_test
inxtbridge_gateway__username=user
inxtbridge_mailer__auth__pass=mailerpass
inxtbridge_storage__mongoOpts__user=admin
inxtbridge_stripe__PK_TEST=pk_test_vpHlkSQ7DhmzSW4EbmfT1lIJ
inxtbridge_complex__rpcPassword=networkpass
inxtbridge_mailer__host=smtp.sendgrid.net
inxtbridge_server__public__host=drive-server
inxtbridge_stripe__SK_TEST=sk_test_stripe_key
inxtbridge_mailer__auth__user=internxt
inxtbridge_mailer__sendgrid__api_key=APIKEY
inxtbridge_mailer__sendgrid__delete_template_id=add_template_id
inxtbridge_mailer__sendgrid__sandbox_mode=false
inxtbridge_storage__mongoOpts__maxPoolSize=100
inxtbridge_stripe__SIG=whsec_otra_clave_de_stripe
inxtbridge_drive__api=http://drive-server:8000
inxtbridge_server__public__port=443
inxtbridge_mailer__port=465
inxtbridge_gateway__password=gatewaypass
inxtbridge_storage__mongoOpts__dbName=__inxt-network
inxtbridge_gateway__JWT_SECRET=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZ3d0RRWUpLb1pJaHZjTkFRRUJCUUFEU3dBd1NBSkJBTDlDTVRlZGEramdIcGJuTmtlSm51TlpnYzg5TGFvMApjUDZJenZSa2EydDFFSm54eWUwNXdSWGZLMXFpbTFOMGU3cGhkd0RkRWYvNGJ1eFc5V2g1UWxzQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=
Expand Down
4 changes: 0 additions & 4 deletions .env.test
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,16 @@ inxtbridge_redis__host=redis
inxtbridge_complex__rpcUser=inxtbridge_complex__rpcUser
inxtbridge_stripe__SIG_TEST=inxtbridge_stripe__SIG_TEST
inxtbridge_gateway__username=inxtbridge_gateway__username
inxtbridge_mailer__auth__pass=inxtbridge_mailer__auth__pass
inxtbridge_stripe__PK_TEST=inxtbridge_stripe__PK_TEST
inxtbridge_complex__rpcPassword=inxtbridge_complex__rpcPassword
inxtbridge_mailer__host=inxtbridge_mailer__host
inxtbridge_server__public__host=inxtbridge_server__public__host
inxtbridge_stripe__SK_TEST=inxtbridge_stripe__SK_TEST
inxtbridge_complex__rpcUrl=inxtbridge_complex__rpcUrl
inxtbridge_mailer__auth__user=inxtbridge_mailer__auth__user
inxtbridge_mailer__sendgrid__api_key=inxtbridge_mailer__sendgrid__api_key
inxtbridge_storage__mongoOpts__server__poolSize=100
inxtbridge_stripe__SIG=inxtbridge_stripe__SIG
inxtbridge_drive__api=inxtbridge_drive__api
inxtbridge_server__public__port=443
inxtbridge_mailer__port=465
inxtbridge_gateway__password=inxtbridge_gateway__password
inxtbridge_NEW_QUEUE_HOST=network-queue
inxtbridge_NEW_QUEUE_PORT=6379
Expand Down
7 changes: 0 additions & 7 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,6 @@ const DEFAULTS = {
level: CONSTANTS.LOG_LEVEL_INFO
},
mailer: {
host: '127.0.0.1',
port: 465,
secure: true,
auth: {
user: 'username',
pass: 'password'
},
from: 'activate@internxt.com',
sendgrid: {
api_key: '',
Expand Down
10 changes: 4 additions & 6 deletions lib/core/mail/SendGridMailService.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import sendGridMail, { MailService as SendGridClient } from '@sendgrid/mail';

export interface MailerConfig {
from?: string;
from: string;
sendgrid: {
api_key: string;
sandbox_mode?: boolean;
sandbox_mode: boolean;
delete_template_id: string;
};
}
Expand All @@ -13,8 +13,6 @@ export interface MailService {
sendDeleteUserMail: (sendTo: string, redirect: string) => Promise<void>;
}

const DEFAULT_FROM = 'activate@internxt.com';

export class SendGridMailService implements MailService {
constructor(
private config: MailerConfig,
Expand All @@ -29,7 +27,7 @@ export class SendGridMailService implements MailService {
await this.client.send({
to: sendTo,
from: {
email: from || DEFAULT_FROM,
email: from,
name: 'Internxt',
},
subject: '',
Expand All @@ -47,7 +45,7 @@ export class SendGridMailService implements MailService {
templateId: sendgrid.delete_template_id,
mailSettings: {
sandboxMode: {
enable: sendgrid.sandbox_mode || false,
enable: sendgrid.sandbox_mode,
},
},
}, false);
Expand Down
58 changes: 0 additions & 58 deletions lib/core/mail/usecase.ts

This file was deleted.

80 changes: 1 addition & 79 deletions lib/core/users/usecase.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { createHash, randomBytes } from 'crypto';
import { createHash } from 'crypto';

import { UsersRepository } from './Repository';
import { BucketsRepository } from '../buckets/Repository';
import { MailUsecase } from '../mail/usecase';
import { MailService } from '../mail/SendGridMailService';
import { EventBus, EventBusEvents } from '../../server/eventBus';
import { FramesRepository } from '../frames/Repository';
Expand All @@ -16,9 +15,6 @@ function isEmailValid(email: string) {
return email.match(emailPattern);
}

export const RESET_PASSWORD_TOKEN_BYTES_LENGTH = 256;
export const SHA256_HASH_BYTES_LENGTH = 32;

export interface UserSpaceSnapshot {
maxSpaceBytes: number;
totalUsedSpaceBytes: number;
Expand Down Expand Up @@ -56,17 +52,6 @@ export class EmailIsAlreadyInUseError extends Error {
}
}

export class ResetPasswordImpersonationError extends Error {
constructor(
userPerformingAction?: string,
userImpersonated?: string
) {
super(`User ${userPerformingAction || ''} tried to impersonate ${userImpersonated || ''}`);

Object.setPrototypeOf(this, ResetPasswordImpersonationError.prototype);
}
}

export class UserDeactivationDisabledError extends Error {
constructor() {
super('This account has the deactivation disabled');
Expand All @@ -80,7 +65,6 @@ export class UsersUsecase {
private usersRepository: UsersRepository,
private framesRepository: FramesRepository,
private bucketsRepository: BucketsRepository,
private mailUsecase: MailUsecase,
private eventBus: EventBus,
private mailService: MailService
) {}
Expand Down Expand Up @@ -175,68 +159,6 @@ export class UsersUsecase {
await this.usersRepository.updateByUuid(uuid, { maxSpaceBytes: bytes });
}

async requestPasswordReset(
userRequestingResetEmail: User['email'],
redirect: string,
url?: string
): Promise<BasicUser> {
const user = await this.usersRepository.findByEmail(userRequestingResetEmail);

if (!user) {
throw new UserNotFoundError();
}

const resetToken = randomBytes(RESET_PASSWORD_TOKEN_BYTES_LENGTH).toString('hex');

await this.usersRepository.updateById(user.id, {
resetter: resetToken
});

await this.mailUsecase.sendResetPasswordMail(
userRequestingResetEmail,
resetToken,
redirect,
url
);

return user;
}

/**
* Confirms and applies the password reset
* @param password new password
* @param resetter token used to reset the password
*/
async resetPassword(password: string, resetter: string) {
const isSHA256Encoded = Buffer.from(password, 'hex').length === SHA256_HASH_BYTES_LENGTH;

if (!isSHA256Encoded) {
throw new InvalidDataFormatError('Password must be an hex encoded SHA-256 hash');
}

const resetterIsHexEncoded = Buffer.from(resetter, 'hex').length === RESET_PASSWORD_TOKEN_BYTES_LENGTH;

if (!resetterIsHexEncoded) {
throw new InvalidDataFormatError('Resetter must be an hex encoded 256 byte string');
}

const user = await this.usersRepository.findOne({ resetter });

if (!user) {
throw new UserNotFoundError();
}

const hashpass = createHash('sha256').update(password).digest('hex');
const newResetter = null;

await this.usersRepository.updateById(user.id, {
resetter: newResetter,
hashpass
});

return user;
}

async requestUserDestroy(
userId: string,
deactivator: string,
Expand Down
18 changes: 0 additions & 18 deletions lib/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ const { ErrorHandlerFactory: errorHandler } = require('./server/middleware/error

const Server = require('./server');
const pow = require('./server/middleware/pow');
const Mailer = require('inxt-service-mailer');
const { SendGridMailService } = require('./core/mail/SendGridMailService');
const log = require('./logger');
const NetworkMessageQueue = require('./server/queues/networkQueue');
Expand Down Expand Up @@ -119,7 +118,6 @@ Engine.prototype.start = function (callback) {
NOTIFICATIONS_API_KEY
);

this.mailer = new Mailer(this._config.mailer);
this.mailService = new SendGridMailService(this._config.mailer);
this.redis = require('redis').createClient(this._config.redis);
this.redis.on('ready', () => {
Expand Down Expand Up @@ -206,7 +204,6 @@ Engine.prototype._configureApp = function () {
const routers = Server.Routes({
config: this._config,
storage: this.storage,
mailer: this.mailer,
redis: this.redis,
networkQueue: this.networkQueue,
});
Expand Down Expand Up @@ -248,24 +245,9 @@ Engine.prototype._configureApp = function () {
app.use(errorHandler({ logger: log }));
app.use(json());

const profile = this._config.server.public || this._config.server;
const port = [443, 80].indexOf(profile.port) > -1 ? profile.port : undefined;
const protocol =
this._config.server.ssl &&
this._config.server.ssl.cert &&
this._config.server.ssl.key
? 'https:'
: 'http:';

bindNewRoutes(
app,
this.storage,
this.mailer,
{
host: profile.host,
port,
protocol,
},
log,
this.networkQueue,
this.notifications,
Expand Down
5 changes: 0 additions & 5 deletions lib/server/http/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { MongoDBBucketsRepository, MongoDBUsersRepository, UsersUsecase } from "
import { BucketsRepository } from "../../core/buckets/Repository";
import { UsersRepository } from "../../core/users/Repository";

import { Mailer, MailUsecase, Profile, SendGridMailUsecase } from "../../core/mail/usecase";
import { MailService } from "../../core/mail/SendGridMailService";
import { createUsersHTTPRouter } from "./users";
import { HTTPUsersController } from "./users/controller";
Expand Down Expand Up @@ -54,8 +53,6 @@ interface Models {
export function bindNewRoutes(
app: Application,
storage: { models: Models },
mailer: Mailer,
profile: Profile,
log: Logger,
networkQueue: any,
notifications: Notifications,
Expand All @@ -74,14 +71,12 @@ export function bindNewRoutes(
const shardsRepository: ShardsRepository = new MongoDBShardsRepository(models.Shard);
const fileStateRepository: FileStateRepository = new MongoDBFileStateRepository(models.FileState);

const mailUsecase: MailUsecase = new SendGridMailUsecase(mailer, profile);
const eventBus = new EventBus(log, notifications);

const usersUsecase = new UsersUsecase(
usersRepository,
framesRepository,
bucketsRepository,
mailUsecase,
eventBus,
mailService
);
Expand Down
Loading
Loading