Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove redis from backend #1141

Merged
merged 16 commits into from
Sep 23, 2024
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
rename session to account in ds
malteish committed Aug 12, 2024
commit 6a268111b6290fc3ac89ef54ca3ed094f07b2321
Original file line number Diff line number Diff line change
@@ -76,7 +76,7 @@ describe('MessageProcessor', () => {
const isSender = getAddress(ensName) === sender.address;
const isReceiver = getAddress(ensName) === receiver.address;

const session = (
const account = (
account: string,
token: string,
profile: UserProfile,
@@ -97,14 +97,14 @@ describe('MessageProcessor', () => {

if (isSender) {
return {
...session(sender.address, '123', emptyProfile),
...account(sender.address, '123', emptyProfile),
spamFilterRules: {},
};
}

if (isReceiver) {
return {
...session(getAddress(receiver.address), 'abc', {
...account(getAddress(receiver.address), 'abc', {
...emptyProfile,
publicEncryptionKey:
receiver.profileKeys.encryptionKeyPair.publicKey,
@@ -256,7 +256,7 @@ describe('MessageProcessor', () => {

await expect(() =>
messageProcessor.processEnvelop(incomingEnvelop),
).rejects.toEqual(Error('unknown session'));
).rejects.toEqual(Error('unknown account'));
});
// //TODO remove skip once spam-filter is implemented
// //TODO remove skip once spam-filter is implemented
6 changes: 3 additions & 3 deletions packages/delivery-service/src/message/MessageProcessor.ts
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ export class MessageProcessor {
* In order to be considered valid a incoming message has to meet the following criterias
* 1. The message size must be lower than the sizeLimit specified by the deliveryService {@see messageIsToLarge}
* 2. The DeliveryServiceToken used by the sender has to be valid
* 3. The receiver has to have a session at the deliveryService
* 3. The receiver has to have a account at the deliveryService
* 4. The message must pass every {@see SpamFilterRule} the receiver declared
*/
public async processEnvelop(envelop: EncryptionEnvelop): Promise<void> {
@@ -107,11 +107,11 @@ export class MessageProcessor {
);
console.debug(conversationId, deliveryInformation);

//Retrieves the session of the receiver
//Retrieves the account of the receiver
const receiverAccount = await this.db.getAccount(receiverAddress);
if (!receiverAccount) {
console.debug('unknown user ', deliveryInformation.to);
throw Error('unknown session');
throw Error('unknown account');
}

//Checks if the message is spam
10 changes: 5 additions & 5 deletions packages/delivery-service/src/messaging.test.ts
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ describe('Messaging', () => {
const isReceiver =
ethersHelper.formatAddress(address) === receiver.address;

const session = (
const account = (
account: string,
token: string,
profile: UserProfile,
@@ -64,11 +64,11 @@ describe('Messaging', () => {
});

if (isSender) {
return session(sender.address, '123', emptyProfile);
return account(sender.address, '123', emptyProfile);
}

if (isReceiver) {
return session(receiver.address, 'abc', {
return account(receiver.address, 'abc', {
...emptyProfile,
publicEncryptionKey:
receiver.profileKeys.encryptionKeyPair.publicKey,
@@ -198,14 +198,14 @@ describe('Messaging', () => {
done();
});

const session = async (addr: string) => {
const account = async (addr: string) => {
return {
...(await getAccount(addr)),
spamFilterRules: { minNonce: 2 },
} as Account;
};
const db = {
getAccount: session,
getAccount: account,
createMessage: () => {},
getIdEnsName: async (ensName: string) => ensName,
getUsersNotificationChannels: () => Promise.resolve([]),
Original file line number Diff line number Diff line change
@@ -4,15 +4,15 @@ import { Redis, RedisPrefix } from '../getDatabase';

export function getAccount(redis: Redis) {
return async (address: string) => {
const session = await redis.get(
const account = await redis.get(
RedisPrefix.Account + ethers.utils.getAddress(address),
);

if (!session) {
if (!account) {
console.debug('there is no account for this address: ', address);
return null;
}

return JSON.parse(session) as Account;
return JSON.parse(account) as Account;
};
}
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ describe('Set Account', () => {
publicSigningKey: '',
deliveryServices: [],
};
const session: Account = {
const account: Account = {
account: USER_ADDRESS,
signedUserProfile: { profile, signature: 'foo' },
token: '',
@@ -36,12 +36,12 @@ describe('Set Account', () => {
};

const priorSetAccount = await db.getAccount(USER_ADDRESS);
//User has no session yet
//User has no account yet
expect(priorSetAccount).toBe(null);
await db.setAccount(USER_ADDRESS, session);
await db.setAccount(USER_ADDRESS, account);

const afterSetAccount = await db.getAccount(USER_ADDRESS);
//User has no session yet
//User has no account yet
expect(afterSetAccount?.signedUserProfile).toEqual({
profile,
signature: 'foo',
@@ -53,7 +53,7 @@ describe('Set Account', () => {
publicSigningKey: '',
deliveryServices: [],
};
const session: Account = {
const account: Account = {
// Address is not normalized
account: USER_ADDRESS.toUpperCase(),
signedUserProfile: { profile, signature: 'foo' },
@@ -65,25 +65,25 @@ describe('Set Account', () => {
};

const priorSetAccount = await db.getAccount(USER_ADDRESS);
//User has no session yet
//User has no account yet
expect(priorSetAccount).toBe(null);
await db.setAccount(USER_ADDRESS, session);
await db.setAccount(USER_ADDRESS, account);

const afterSetAccount = await db.getAccount(USER_ADDRESS);
//User has no session yet
//User has no account yet
expect(afterSetAccount?.signedUserProfile).toEqual({
profile,
signature: 'foo',
});
});

it('Rejects session with an invalid address', async () => {
it('Rejects account with an invalid address', async () => {
const profile: UserProfile = {
publicEncryptionKey: '',
publicSigningKey: '',
deliveryServices: [],
};
const session: Account = {
const account: Account = {
account: USER_ADDRESS,
signedUserProfile: {
profile,
@@ -96,20 +96,20 @@ describe('Set Account', () => {
},
};
try {
await db.setAccount('foo', session);
await db.setAccount('foo', account);
fail();
} catch (e) {
expect(e).toStrictEqual(Error('Invalid address'));
}
});

it('Rejects session with an invalid schema', async () => {
it('Rejects account with an invalid schema', async () => {
const invalidAccount = {} as Account;
try {
await db.setAccount('foo', invalidAccount);
fail();
} catch (e) {
expect(e).toStrictEqual(Error('Invalid session'));
expect(e).toStrictEqual(Error('Invalid account'));
}
});
});
Original file line number Diff line number Diff line change
@@ -9,8 +9,8 @@ export function setAccount(redis: Redis) {
const isAddess = ethers.utils.isAddress(address);

if (!isValid) {
console.debug('Invalid session: ', Account);
throw Error('Invalid session');
console.debug('Invalid account: ', Account);
throw Error('Invalid account');
}

if (!isAddess) {
2 changes: 1 addition & 1 deletion packages/delivery-service/src/persistence/getDatabase.ts
Original file line number Diff line number Diff line change
@@ -98,7 +98,7 @@ export async function getDatabase(
}

export interface IDatabase extends IAccountDatabase {
setAccount: (address: string, session: AccountType) => Promise<void>;
setAccount: (address: string, account: AccountType) => Promise<void>;
getAccount: (address: string) => Promise<AccountType | null>;
//TODO use address
getIncomingMessages: (
Original file line number Diff line number Diff line change
@@ -37,7 +37,7 @@ describe('Set Users NotificationChannel', () => {
const priorSetUsersNotificationChannel =
await db.getUsersNotificationChannels(USER_ADDRESS);

//User has no session yet
//User has no account yet
expect(priorSetUsersNotificationChannel).toEqual([]);
await db.addUsersNotificationChannel(USER_ADDRESS, notificationChannel);

@@ -121,7 +121,7 @@ describe('Set Users NotificationChannel', () => {
const priorSetUsersNotificationChannel =
await db.getUsersNotificationChannels(USER_ADDRESS);

//User has no session yet
//User has no account yet
expect(priorSetUsersNotificationChannel).toEqual([]);
await db.addUsersNotificationChannel(USER_ADDRESS, notificationChannel);

4 changes: 2 additions & 2 deletions packages/delivery-service/src/profile/profile.test.ts
Original file line number Diff line number Diff line change
@@ -27,15 +27,15 @@ const setUpApp = async (
};

const createDbMock = async () => {
const sessionMocked = {
const accountMocked = {
challenge: '123',
token: 'deprecated token that is not used anymore',
signedUserProfile: {},
} as Account;

const dbMock = {
getAccount: async (ensName: string) =>
Promise.resolve<Account>(sessionMocked), // returns some valid session
Promise.resolve<Account>(accountMocked), // returns some valid account
setAccount: async (_: string, __: Account) => {},
getIdEnsName: async (ensName: string) => ensName,
};
Original file line number Diff line number Diff line change
@@ -11,9 +11,9 @@ export function handleResolveProfileExtension(axios: Axios, db: IDatabase) {
const idEnsName = await db.getIdEnsName(ensName);

//Get the Account to retrieve profileExtension
const session = await db.getAccount(idEnsName);
const account = await db.getAccount(idEnsName);

if (!session) {
if (!account) {
//The requested ens-name is not known to the delivery service
const error = 'unknown user';
global.logger.warn({
@@ -23,7 +23,7 @@ export function handleResolveProfileExtension(axios: Axios, db: IDatabase) {
return res.status(400).send({ error });
}

const { profileExtension } = session;
const { profileExtension } = account;

return res.status(200).send({
jsonrpc: '2.0',
6 changes: 3 additions & 3 deletions packages/delivery-service/src/rpc/rpc-proxy.test.ts
Original file line number Diff line number Diff line change
@@ -65,7 +65,7 @@ describe('rpc-Proxy', () => {
const isReceiver =
ethersHelper.formatAddress(address) === receiver.address;

const session = (
const account = (
account: string,
token: string,
profile: UserProfile,
@@ -79,11 +79,11 @@ describe('rpc-Proxy', () => {
});

if (isSender) {
return session(sender.address, '123', emptyProfile);
return account(sender.address, '123', emptyProfile);
}

if (isReceiver) {
return session(RECEIVER_NAME, 'abc', {
return account(RECEIVER_NAME, 'abc', {
...emptyProfile,
publicEncryptionKey:
receiver.profileKeys.encryptionKeyPair.publicKey,
12 changes: 6 additions & 6 deletions packages/delivery-service/src/socketAuth.ts
Original file line number Diff line number Diff line change
@@ -33,15 +33,15 @@ export function socketAuth(
console.log('check token has failed for WS ');
return next(new Error('check token has failed for WS'));
}
const session = await db.getAccount(ensName);
if (!session) {
throw Error('Could not get session');
const account = await db.getAccount(ensName);
if (!account) {
throw Error('Could not get account');
}
//we use session.account here as a key for setAccount here.
//we use account.account here as a key for setAccount here.
//We can do this because the address is used as account when the Account has been created.
//That saves a address lookup via ENS
await db.setAccount(session.account, {
...session,
await db.setAccount(account.account, {
...account,
socketId: socket.id,
});
} catch (e) {
8 changes: 4 additions & 4 deletions packages/delivery-service/src/ws/WebSocketManager.test.ts
Original file line number Diff line number Diff line change
@@ -94,7 +94,7 @@ describe('WebSocketManager', () => {

expect(socket0IsConnected).toBe(false);
});
it('reject socket without session', async () => {
it('reject socket without account', async () => {
const mockedWeb3Provider = {
resolveName: (_: string) => Promise.resolve('0x'),
} as any;
@@ -173,7 +173,7 @@ describe('WebSocketManager', () => {
});
});
describe('isConnected', () => {
it('returns true if name has one session', async () => {
it('returns true if name has one account', async () => {
const mockedWeb3Provider = {
resolveName: (_: string) => Promise.resolve(receiver.address),
} as any;
@@ -222,7 +222,7 @@ describe('WebSocketManager', () => {
const isConnected = await wsManager.isConnected(receiver.address);
expect(isConnected).toBe(true);
});
it('returns true if name has at least one session', async () => {
it('returns true if name has at least one account', async () => {
const mockedWeb3Provider = {
resolveName: (_: string) => Promise.resolve(receiver.address),
} as any;
@@ -345,7 +345,7 @@ describe('WebSocketManager', () => {
const isConnected = await wsManager.isConnected(rando.address);
expect(isConnected).toBe(false);
});
it('keeps track of different independent sessions', async () => {
it('keeps track of different independent accounts', async () => {
const mockedWeb3Provider = {
resolveName: (_: string) => {
if (_ === receiver.account.ensName) {
Loading