Compare commits
10 commits
76d314ec00
...
bce7b1cdd4
Author | SHA1 | Date | |
---|---|---|---|
bce7b1cdd4 | |||
047174291b | |||
4f7835ccbe | |||
4393a2b226 | |||
255b3fd215 | |||
2eea58808b | |||
b0d949b350 | |||
4ffb09e2b8 | |||
39475fdb47 | |||
b70527032e |
22 changed files with 858 additions and 755 deletions
11
.gitea/workflows/action_push.yml
Normal file
11
.gitea/workflows/action_push.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
name: Push Action
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '!**'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
uses: ./.gitea/workflows/test.yml
|
||||
|
16
.gitea/workflows/action_tag.yml
Normal file
16
.gitea/workflows/action_tag.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
name: Tag Action
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
test:
|
||||
uses: ./.gitea/workflows/test.yml
|
||||
release_code:
|
||||
needs: test
|
||||
uses: ./.gitea/workflows/release_code.yml
|
||||
release_amd:
|
||||
needs: [test, release_code]
|
||||
uses: ./.gitea/workflows/release_amd.yml
|
36
.gitea/workflows/release_amd.yml
Normal file
36
.gitea/workflows/release_amd.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
name: Outbag AMD Release
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
secrets:
|
||||
|
||||
|
||||
jobs:
|
||||
release-amd:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
mkdir build
|
||||
npm run bundleRelease
|
||||
|
||||
- name: Build AMD
|
||||
run: |
|
||||
npm run build-amd
|
||||
mkdir upload
|
||||
cp build/bin/* upload
|
||||
|
||||
- name: Create Release AMD
|
||||
id: gitea-release-amd
|
||||
uses: actions/release-action@main
|
||||
with:
|
||||
files: |
|
||||
upload/**
|
||||
api_key: '${{ secrets.RELEASE_TOKEN }}'
|
43
.gitea/workflows/release_code.yml
Normal file
43
.gitea/workflows/release_code.yml
Normal file
|
@ -0,0 +1,43 @@
|
|||
name: Outbag Code release
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
secrets:
|
||||
|
||||
jobs:
|
||||
release-code:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
mkdir build
|
||||
npm run prepublish
|
||||
|
||||
- name: Build Code
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install zip tar -y
|
||||
mkdir outbag_server
|
||||
mkdir outbag_server/dist
|
||||
mkdir upload
|
||||
cp -r dist/* outbag_server/dist
|
||||
cp package.json outbag_server
|
||||
cp package-lock.json outbag_server
|
||||
cp readme.md outbag_server
|
||||
zip -r upload/OutbagServer.zip outbag_server/*
|
||||
tar -czvf upload/OutbagServer.tar.gz outbag_server/*
|
||||
|
||||
- name: Create Release Code
|
||||
id: gitea-release-code
|
||||
uses: actions/release-action@main
|
||||
with:
|
||||
files: |
|
||||
upload/**
|
||||
api_key: '${{ secrets.RELEASE_TOKEN }}'
|
38
.gitea/workflows/test.yml
Normal file
38
.gitea/workflows/test.yml
Normal file
|
@ -0,0 +1,38 @@
|
|||
name: Outbag Tests
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
secrets:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
services:
|
||||
database:
|
||||
image: mariadb
|
||||
env:
|
||||
MYSQL_DATABASE: outbag
|
||||
MYSQL_USER: outbag
|
||||
MYSQL_PASSWORD: 12345678
|
||||
MYSQL_ROOT_PASSWORD: 12345678
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
npm ci
|
||||
- name: Build Outbag
|
||||
run: |
|
||||
mkdir build
|
||||
npm run prepublish
|
||||
npm run bundleRelease
|
||||
- name: Generate Self-Signed Cert
|
||||
run:
|
||||
sh genSelfSignedCert.sh
|
||||
- name: Run Tests
|
||||
run: |
|
||||
node tests/ws.js ci
|
||||
node tests/post.js ci
|
1006
package-lock.json
generated
1006
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -4,3 +4,4 @@ export * from "./acts/admin.js"
|
|||
export * from "./acts/rooms.js"
|
||||
export * from "./acts/server.js"
|
||||
export * from "./acts/roomContent.js"
|
||||
export * from "./acts/subscribe.js"
|
|
@ -17,6 +17,7 @@ export const getAccounts: Act = {
|
|||
accounts.name,
|
||||
accounts.viewable,
|
||||
accounts.deleted,
|
||||
accounts.deletedTime,
|
||||
accounts.maxRooms,
|
||||
accounts.maxRoomSize,
|
||||
accounts.maxUsersPerRoom
|
||||
|
@ -28,11 +29,12 @@ export const getAccounts: Act = {
|
|||
let name = d[accounts.name];
|
||||
let viewable = d[accounts.viewable] ? true : false;
|
||||
let deleted = d[accounts.deleted] ? true : false;
|
||||
let deletedTime = Number(d[accounts.deletedTime]);
|
||||
let maxRooms = d[accounts.maxRooms];
|
||||
let maxRoomSize = d[accounts.maxRoomSize];
|
||||
let maxUsersPerRoom = d[accounts.maxUsersPerRoom];
|
||||
if (accID != null && rights != null && name != null && viewable != null && deleted != null && maxRooms != null && maxRoomSize != null && maxUsersPerRoom != null) {
|
||||
return { accID, rights, name, viewable, deleted, maxRooms, maxRoomSize, maxUsersPerRoom };
|
||||
if (accID != null && rights != null && name != null && viewable != null && deleted != null && maxRooms != null && maxRoomSize != null && maxUsersPerRoom != null && deletedTime != null) {
|
||||
return { accID, rights, name, viewable, deleted, deletedTime, maxRooms, maxRoomSize, maxUsersPerRoom };
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
@ -40,6 +42,23 @@ export const getAccounts: Act = {
|
|||
}
|
||||
};
|
||||
|
||||
export const recoverAccount: Act = {
|
||||
state: STATE.client,
|
||||
right: PERMISSIONS.CAN_USE_API | PERMISSIONS.EDIT_USERS,
|
||||
data: {
|
||||
accID: "number"
|
||||
},
|
||||
func: async (client: Client, data: any, aws: (code: string, data: any) => void) => {
|
||||
let req = await update(accounts)
|
||||
.set(accounts.deleted, false)
|
||||
.set(accounts.deletedTime, 0)
|
||||
.where(eq(accounts.accID, data.accID))
|
||||
.query(db);
|
||||
if(req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.ACCOUNT_NOT_EXISTS)
|
||||
}
|
||||
}
|
||||
|
||||
export const setPermissions: Act = {
|
||||
state: STATE.client,
|
||||
right: PERMISSIONS.CAN_USE_API | PERMISSIONS.EDIT_RIGHTS,
|
||||
|
|
|
@ -6,6 +6,8 @@ import { isCategoryInRoom, isItemInRoom, isProductInRoom, isRoomDataFull } from
|
|||
import { ROOM_RIGHTS } from "../../server/permissions.js";
|
||||
import { act_error } from "../../server/errors.js";
|
||||
import { uts } from "../../sys/tools.js";
|
||||
import { sendRoomListeners } from "../listener.js";
|
||||
import { LISTENER_ACTION, LISTENER_TYPE } from "../../server/listener.js";
|
||||
|
||||
export const getCategories: Act = {
|
||||
state: STATE.client | STATE.remote,
|
||||
|
@ -128,10 +130,12 @@ export const addCategory: Act = {
|
|||
.where(eq(listCategories.roomID, roomID))
|
||||
.limit(1)
|
||||
).query(db);
|
||||
if (req.affectedRows > 0) aws("ok", {
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", {
|
||||
catID: Number(req.insertId)
|
||||
});
|
||||
else aws("error", act_error.ADD_CAT);
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.CATEGORIES, LISTENER_ACTION.ADD, [req.insertId]);
|
||||
} else aws("error", act_error.ADD_CAT);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -165,8 +169,10 @@ export const changeCategory: Act = {
|
|||
eq(listCategories.listCatID, data.listCatID)
|
||||
))
|
||||
.query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.CATEGORIES, LISTENER_ACTION.CHANGE, [data.listCatID]);
|
||||
} else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -202,8 +208,10 @@ export const changeCategoriesOrder: Act = {
|
|||
.query(db);
|
||||
affacted += req.affectedRows;
|
||||
}
|
||||
if (affacted > 0) aws("ok", "");
|
||||
else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
if (affacted > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.CATEGORIES, LISTENER_ACTION.CHANGE, data.listCatIDs);
|
||||
} else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -233,8 +241,10 @@ export const deleteCategory: Act = {
|
|||
eq(listCategories.listCatID, data.listCatID)
|
||||
))
|
||||
.query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.CATEGORIES, LISTENER_ACTION.DELETE, [data.listCatID]);
|
||||
} else aws("error", act_error.CAT_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -383,10 +393,12 @@ export const addProduct: Act = {
|
|||
data.ean,
|
||||
data.parent != null ? data.parent : null,
|
||||
).query(db);
|
||||
if (req.affectedRows > 0) aws("ok", {
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", {
|
||||
listProdID: Number(req.insertId)
|
||||
});
|
||||
else aws("error", act_error.ADD_PROD);
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.PRODUCTS, LISTENER_ACTION.ADD, [req.insertId]);
|
||||
} else aws("error", act_error.ADD_PROD);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -434,8 +446,10 @@ export const changeProduct: Act = {
|
|||
eq(listProducts.roomID, roomID),
|
||||
))
|
||||
.query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.PROD_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.PRODUCTS, LISTENER_ACTION.CHANGE, [data.listProdID]);
|
||||
} else aws("error", act_error.PROD_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -465,8 +479,10 @@ export const deleteProduct: Act = {
|
|||
eq(listProducts.listProdID, data.listProdID),
|
||||
eq(listProducts.roomID, roomID),
|
||||
)).query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.PROD_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.PRODUCTS, LISTENER_ACTION.DELETE, [data.listProdID]);
|
||||
} else aws("error", act_error.PROD_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -559,7 +575,7 @@ export const getItem: Act = {
|
|||
], listItems)
|
||||
.where(and(
|
||||
eq(listItems.listItemID, data.listItemID),
|
||||
eq(listItems.roomID, data.roomID)
|
||||
eq(listItems.roomID, roomID)
|
||||
))
|
||||
.query(db);
|
||||
if (req.length > 0) {
|
||||
|
@ -636,10 +652,12 @@ export const addItem: Act = {
|
|||
data.value,
|
||||
data.listProdID != null ? data.listProdID : null,
|
||||
).query(db);
|
||||
if (req.affectedRows > 0) aws("ok", {
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", {
|
||||
listItemID: Number(req.insertId)
|
||||
});
|
||||
else aws("error", act_error.ADD_ITEM);
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.ADD, [req.insertId]);
|
||||
} else aws("error", act_error.ADD_ITEM);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -684,11 +702,13 @@ export const changeItem: Act = {
|
|||
.set(listItems.link, data.listProdID != null ? data.listProdID : null)
|
||||
.where(and(
|
||||
eq(listItems.listItemID, data.listItemID),
|
||||
eq(listItems.roomID, data.roomID)
|
||||
eq(listItems.roomID, roomID)
|
||||
))
|
||||
.query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.CHANGE, [data.listItemID]);
|
||||
} else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -723,8 +743,10 @@ export const changeItemState: Act = {
|
|||
eq(listItems.roomID, roomID)
|
||||
))
|
||||
.query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.CHANGE, [data.listItemID]);
|
||||
} else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -753,7 +775,12 @@ export const changeItemStates: Act = {
|
|||
if (
|
||||
data.listItemIDs.length != data.changedTimes.length
|
||||
|| data.changedTimes.length != data.states.length
|
||||
) return void aws("error", "data");
|
||||
) return void aws("error", act_error.DATA);
|
||||
for (let i = 0; i < data.listItemIDs.length; i++) {
|
||||
let id = data.listItemIDs[i];
|
||||
if (typeof id != "number" || id < 0)
|
||||
return void aws("error", act_error.DATA);
|
||||
}
|
||||
for (let i = 0; i < data.listItemIDs.length; i++) {
|
||||
let id = data.listItemIDs[i];
|
||||
let time = data.changedTimes[i];
|
||||
|
@ -769,6 +796,7 @@ export const changeItemStates: Act = {
|
|||
.query(db);
|
||||
}
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.CHANGE, data.listItemIDs);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -797,8 +825,10 @@ export const deleteItem: Act = {
|
|||
eq(listItems.listItemID, data.listItemID),
|
||||
eq(listItems.roomID, roomID)
|
||||
)).query(db);
|
||||
if (req.affectedRows > 0) aws("ok", "");
|
||||
else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
if (req.affectedRows > 0) {
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.DELETE, [data.listItemID]);
|
||||
} else aws("error", act_error.ITEM_NOT_EXISTS);
|
||||
}
|
||||
};
|
||||
export const deleteItemByState: Act = {
|
||||
|
@ -827,5 +857,6 @@ export const deleteItemByState: Act = {
|
|||
eq(listItems.roomID, roomID)
|
||||
)).query(db);
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ITEMS, LISTENER_ACTION.DELETE, []);
|
||||
}
|
||||
}
|
|
@ -8,6 +8,8 @@ import { isRoomFull } from "../helper.js";
|
|||
import { fetchRemoteAsServer } from "../server.js";
|
||||
import { Act, Client, STATE } from "../user.js";
|
||||
import { act_error } from "../../server/errors.js";
|
||||
import { sendRoomListeners } from "../listener.js";
|
||||
import { LISTENER_ACTION, LISTENER_TYPE } from "../../server/listener.js";
|
||||
|
||||
export const listRooms: Act = {
|
||||
state: STATE.client | STATE.remote,
|
||||
|
@ -46,7 +48,7 @@ export const listRooms: Act = {
|
|||
if (name != null && owner != null && rights != null && visibility != null && title != null && description != null && icon != null && confirmed != null) {
|
||||
return { name, server, owner, rights, visibility, title, description, icon, debug: global.debug, confirmed };
|
||||
}
|
||||
console.log(name, server, owner, rights, visibility, title, description, icon, global.debug, confirmed)
|
||||
//console.log(name, server, owner, rights, visibility, title, description, icon, global.debug, confirmed)
|
||||
return null;
|
||||
});
|
||||
if (client.state == STATE.client) {
|
||||
|
@ -608,6 +610,7 @@ export const setAdminStatus: Act = {
|
|||
} else {
|
||||
aws("error", act_error.MEMBER_NOT_EXISTS);
|
||||
}
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ROOMINFO, LISTENER_ACTION.CHANGE, []);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -617,6 +620,7 @@ export const leaveRoom: Act = {
|
|||
data: {
|
||||
room: "string",
|
||||
server: "string",
|
||||
// TODO: add force option for remote rooms
|
||||
},
|
||||
func: async (client: Client, data: any, aws: (code: string, data: any) => void) => {
|
||||
if (!checkSelfTag(data.server)) {
|
||||
|
@ -706,6 +710,7 @@ export const setRoomRight: Act = {
|
|||
.where(eq(rooms.roomID, roomID))
|
||||
.query(db);
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ROOMINFO, LISTENER_ACTION.CHANGE, []);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -735,5 +740,6 @@ export const changeRoomMeta: Act = {
|
|||
.where(eq(rooms.roomID, roomID))
|
||||
.query(db);
|
||||
aws("ok", "");
|
||||
sendRoomListeners(roomID, LISTENER_TYPE.ROOMINFO, LISTENER_ACTION.CHANGE, []);
|
||||
}
|
||||
};
|
68
src/api/acts/subscribe.ts
Normal file
68
src/api/acts/subscribe.ts
Normal file
|
@ -0,0 +1,68 @@
|
|||
import { act_error } from "../../server/errors.js";
|
||||
import { checkSelfTag } from "../../server/outbagURL.js";
|
||||
import { Act, Client, STATE } from "../user.js";
|
||||
import { wsClient } from "../ws.js";
|
||||
|
||||
export const subscribeRoom: Act = {
|
||||
state: STATE.client | STATE.remote,
|
||||
right: 0,
|
||||
data: {
|
||||
room: "name",
|
||||
server: "string",
|
||||
},
|
||||
func: async (client: Client, data: any, aws: (code: string, data: any) => void) => {
|
||||
if (!(client.connectionClient instanceof wsClient)) {
|
||||
return void aws("error", act_error.CONNECTION);
|
||||
}
|
||||
if (!checkSelfTag(data.server)) {
|
||||
throw new Error("Remote not yet implemented.");
|
||||
return;
|
||||
}
|
||||
const roomID = await client.isInRoom(data.room);
|
||||
if (roomID == -1) {
|
||||
aws("error", act_error.NOT_IN_ROOM);
|
||||
return;
|
||||
}
|
||||
client.connectionClient.listenRoom(roomID, data.room, data.server);
|
||||
aws("ok", "");
|
||||
}
|
||||
};
|
||||
|
||||
export const unsubscribeRoom: Act = {
|
||||
state: STATE.client | STATE.remote,
|
||||
right: 0,
|
||||
data: {
|
||||
room: "name",
|
||||
server: "string",
|
||||
},
|
||||
func: async (client: Client, data: any, aws: (code: string, data: any) => void) => {
|
||||
if (!(client.connectionClient instanceof wsClient)) {
|
||||
return void aws("error", act_error.CONNECTION);
|
||||
}
|
||||
if (!checkSelfTag(data.server)) {
|
||||
throw new Error("Remote not yet implemented.");
|
||||
return;
|
||||
}
|
||||
const roomID = await client.isInRoom(data.room);
|
||||
if (roomID == -1) {
|
||||
aws("error", act_error.NOT_IN_ROOM);
|
||||
return;
|
||||
}
|
||||
client.connectionClient.unlistenRoom(roomID);
|
||||
aws("ok", "");
|
||||
}
|
||||
};
|
||||
|
||||
export const unsubscribeAllRooms: Act = {
|
||||
state: STATE.client | STATE.remote,
|
||||
right: 0,
|
||||
data: {},
|
||||
func: async (client: Client, data: any, aws: (code: string, data: any) => void) => {
|
||||
if (!(client.connectionClient instanceof wsClient)) {
|
||||
return void aws("error", act_error.CONNECTION);
|
||||
}
|
||||
// TODO: When implemented close remote listeners
|
||||
client.connectionClient.unlistenAllRooms();
|
||||
aws("ok", "");
|
||||
}
|
||||
};
|
38
src/api/listener.ts
Normal file
38
src/api/listener.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
import { wsClient } from "./ws.js"
|
||||
|
||||
|
||||
|
||||
interface RoomListener {
|
||||
client: wsClient;
|
||||
room: string;
|
||||
server: string;
|
||||
}
|
||||
|
||||
let roomListeners: { [key: number]: RoomListener[] } = {};
|
||||
|
||||
export const sendRoomListeners = async (roomID: number, type: string | number, action: number, ids: number[]) => {
|
||||
for (const listener of roomListeners[roomID] ?? []) {
|
||||
listener.client.sendFromServer({
|
||||
room: listener.room,
|
||||
server: listener.server,
|
||||
type,
|
||||
action,
|
||||
ids,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const addRoomListener = (client: wsClient, roomID: number, room: string, server: string) => {
|
||||
if (!Array.isArray(roomListeners[roomID])) roomListeners[roomID] = [];
|
||||
const existingListener = roomListeners[roomID].find(listener => listener.client === client);
|
||||
if (!existingListener) roomListeners[roomID].push({ client, room, server });
|
||||
|
||||
};
|
||||
|
||||
export const removeRoomListener = (client: wsClient, roomID: number | null = null) => {
|
||||
let keys = roomID == null ? Object.keys(roomListeners) as any : [roomID];
|
||||
for (const key of keys) {
|
||||
roomListeners[key] = roomListeners[key].filter(listener => listener.client !== client);
|
||||
if (roomListeners[key].length === 0) delete roomListeners[key];
|
||||
}
|
||||
};
|
|
@ -116,7 +116,8 @@ export const addPostMethods = (server: express.Express) => {
|
|||
export class postClient {
|
||||
lastReq = uts();
|
||||
client: Client;
|
||||
constructor(ip: string, client = new Client(ip)) {
|
||||
constructor(ip: string, client: Client | null = null) {
|
||||
if (client === null) client = new Client(ip, this);
|
||||
this.client = client;
|
||||
}
|
||||
async runAct(act: Act, json: any, aws: (state: string, data: any) => void) {
|
||||
|
|
|
@ -5,6 +5,8 @@ import { outbagServer, outbagURLfromTag } from "../server/outbagURL.js";
|
|||
import { fetchRemoteAs } from "./server.js";
|
||||
import { debug } from "../sys/log.js";
|
||||
import { act_error } from "../server/errors.js";
|
||||
import { wsClient } from "./ws.js";
|
||||
import { postClient } from "./post.js";
|
||||
|
||||
export const STATE = {
|
||||
no: 0b00001,
|
||||
|
@ -40,7 +42,10 @@ export class Client {
|
|||
challenge: string = "";
|
||||
remoteKey: string = "";
|
||||
|
||||
constructor(ip: string) {
|
||||
connectionClient: wsClient | postClient;
|
||||
|
||||
constructor(ip: string, client: wsClient | postClient) {
|
||||
this.connectionClient = client;
|
||||
this.server = new outbagServer("", "", "", "");
|
||||
this.ip = ip;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import { Act, checktype, Client } from "./user.js";
|
|||
import { debug, error } from "../sys/log.js";
|
||||
import * as importActs from "./acts.js"
|
||||
import { act_error } from "../server/errors.js";
|
||||
import { addRoomListener, removeRoomListener } from "./listener.js";
|
||||
|
||||
let acts = importActs as { [key: string]: Act };
|
||||
|
||||
|
@ -30,9 +31,11 @@ export class wsClient {
|
|||
activeRequests = 0;
|
||||
client: Client;
|
||||
constructor(socket: ws.WebSocket, req: http.IncomingMessage) {
|
||||
this.client = new Client(req.socket.remoteAddress ?? "");
|
||||
this.client = new Client(req.socket.remoteAddress ?? "", this);
|
||||
this.socket = socket;
|
||||
|
||||
clients.push(this);
|
||||
|
||||
socket.on("message", async (msg: any) => {
|
||||
try {
|
||||
this.activeRequests++;
|
||||
|
@ -141,6 +144,7 @@ export class wsClient {
|
|||
});
|
||||
|
||||
socket.on('close', () => {
|
||||
this.unlistenAllRooms();
|
||||
this.open = false;
|
||||
var i = clients.indexOf(this);
|
||||
delete clients[i];
|
||||
|
@ -152,6 +156,7 @@ export class wsClient {
|
|||
|
||||
close(ms: number) {
|
||||
return new Promise<void>(res => {
|
||||
this.unlistenAllRooms();
|
||||
if (this.activeRequests == 0) {
|
||||
this.socket.close();
|
||||
return void res();
|
||||
|
@ -162,6 +167,34 @@ export class wsClient {
|
|||
}, Math.max(100, ms));
|
||||
});
|
||||
}
|
||||
|
||||
sendFromServer(data: any): Promise<boolean> {
|
||||
if (this.socket.readyState != WebSocket.OPEN) {
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
return new Promise((res, rej) => {
|
||||
this.socket.send(JSON.stringify({
|
||||
id: -1,
|
||||
state: "server",
|
||||
data: data
|
||||
}), (err) => {
|
||||
if(err) return void rej(false);
|
||||
return void res(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
listenRoom(roomID: number, room: string, server: string) {
|
||||
addRoomListener(this, roomID, room, server);
|
||||
}
|
||||
unlistenRoom(roomID: number) {
|
||||
removeRoomListener(this, roomID);
|
||||
}
|
||||
unlistenAllRooms() {
|
||||
removeRoomListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
export const closeWebSocket = async () => {
|
||||
|
|
|
@ -124,7 +124,7 @@ async function complete_loaded() {
|
|||
await nman.shutdown();
|
||||
process.exit(1);
|
||||
}
|
||||
warn("Outbag", "Keep running tue to debug Mode");
|
||||
warn("Outbag", "Keep running due to debug Mode");
|
||||
}
|
||||
activatePost();
|
||||
activateWS();
|
||||
|
|
|
@ -10,6 +10,7 @@ export const act_error = {
|
|||
SERVER: "server", // uncaught error in server
|
||||
RECURSION: "recursion", // not allowed due to suspected remote recursion, will only appear with miss configureation
|
||||
REMOTE: "remote", // error while remote request (like could not contact the remote server)
|
||||
CONNECTION: "connection", // the current connection type is not correct
|
||||
|
||||
CLIENT_NOT_EXISTS: "clientnotexists", // seems like your own account does not exists (client.ts acts)
|
||||
ACCOUNT_NOT_EXISTS: "accountnotexists", // referred account does not exists (admin / client trennen? )
|
||||
|
|
14
src/server/listener.ts
Normal file
14
src/server/listener.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
|
||||
export const LISTENER_TYPE = {
|
||||
ROOMINFO: 0,
|
||||
ITEMS: 1,
|
||||
CATEGORIES: 2,
|
||||
PRODUCTS: 3,
|
||||
}
|
||||
|
||||
export const LISTENER_ACTION = {
|
||||
ADD: 0,
|
||||
CHANGE: 1,
|
||||
DELETE: 2,
|
||||
}
|
|
@ -37,10 +37,11 @@ export const warn = (name: string, ...args: any[]) => {
|
|||
let dateString = (new Date()).toLocaleString();
|
||||
console.warn(
|
||||
"\x1b[33m%s\x1b[0m" +
|
||||
"\x1b[1m\x1b[36m%s\x1b[0m",
|
||||
dateString,
|
||||
"\x1b[1m\x1b[48;5;208m%s\x1b[0m\x1b[48;5;208m",
|
||||
dateString+" ",
|
||||
`[${name}]:`,
|
||||
...args
|
||||
...args,
|
||||
"\x1b[0m"
|
||||
);
|
||||
if (global.provideLog != 0) logList.push([logID++, "warn", dateString, name, args]);
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
PORT=7224
|
||||
PORTexposed=7224
|
||||
PATHexposed=/
|
||||
URL=localhost
|
||||
URL=127.0.0.1
|
||||
CertLiveSec=2592000
|
||||
|
||||
[ssl]
|
||||
|
@ -26,3 +26,4 @@ defaultMaxRooms=2
|
|||
defaultMaxRoomSize=10
|
||||
defaultMaxUsersPerRoom=2
|
||||
defaultViewable=true
|
||||
deletedAccountKeepSec=1728000
|
||||
|
|
|
@ -18,29 +18,29 @@ const list = [
|
|||
["signup", async (req) => {
|
||||
await req({}, "signup", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
|
||||
await req({}, "signup", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.ACCOUNT_EXISTS);
|
||||
|
||||
await req({}, "signup", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
|
||||
await req({}, "signup", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.config);
|
||||
}], ["remote", async (req) => {
|
||||
let signature = (await req({ "authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}` },
|
||||
let signature = (await req({ "authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}` },
|
||||
"createSignature", {
|
||||
publicKey
|
||||
}, "ok", null)).sign;
|
||||
|
@ -51,7 +51,7 @@ const list = [
|
|||
"authorization": `Bearer ${token}`
|
||||
}, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7223",
|
||||
server: "127.0.0.1:7223",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "error", act_error.SIGNATURE);
|
||||
|
@ -60,7 +60,7 @@ const list = [
|
|||
"authorization": `Bearer ${token}`
|
||||
}, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: falseSignature
|
||||
}, "error", act_error.SIGNATURE);
|
||||
|
@ -69,7 +69,7 @@ const list = [
|
|||
"authorization": `Bearer ${token}`
|
||||
}, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "ok", null)).challenge;
|
||||
|
@ -78,7 +78,7 @@ const list = [
|
|||
"authorization": `Bearer ${token}`
|
||||
}, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "error", act_error.WRONG_STATE);
|
||||
|
@ -97,7 +97,7 @@ const list = [
|
|||
|
||||
}], ["account", async (req) => {
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getMyAccount", {}, "ok", {
|
||||
rights: PERMISSIONS.ALL,
|
||||
name: name1,
|
||||
|
@ -107,7 +107,7 @@ const list = [
|
|||
maxUsersPerRoom: 2,
|
||||
});
|
||||
await req({
|
||||
"authorization": `Digest name=${name2} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name2} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getMyAccount", {}, "ok", {
|
||||
rights: PERMISSIONS.DEFAULT,
|
||||
name: name2,
|
||||
|
@ -118,31 +118,31 @@ const list = [
|
|||
});
|
||||
}], ["change account", async (req) => {
|
||||
await req({
|
||||
"authorization": `Digest name=${name2} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name2} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "changePassword", {
|
||||
accountKey: accountKey + "lol"
|
||||
}, "ok", "");
|
||||
await req({}, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.AUTH);
|
||||
await req({}, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey: accountKey + "lol"
|
||||
}, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name2} server=localhost:7224 accountKey=${accountKey + "lol"}`
|
||||
"authorization": `Digest name=${name2} server=127.0.0.1:7224 accountKey=${accountKey + "lol"}`
|
||||
}, "deleteAccount", {}, "ok", "");
|
||||
await req({}, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey: accountKey + "lol"
|
||||
}, "error", act_error.AUTH);
|
||||
}], ["admin", async (req) => {
|
||||
let resp = await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getAccounts", {}, "ok", [
|
||||
{
|
||||
accID: 1,
|
||||
|
@ -150,6 +150,7 @@ const list = [
|
|||
name: "testUser1",
|
||||
viewable: true,
|
||||
deleted: false,
|
||||
deletedTime: 0,
|
||||
maxRooms: 2,
|
||||
maxRoomSize: 10,
|
||||
maxUsersPerRoom: 2
|
||||
|
@ -159,19 +160,20 @@ const list = [
|
|||
name: "testUser2",
|
||||
viewable: true,
|
||||
deleted: true,
|
||||
deletedTime: null,
|
||||
maxRooms: 2,
|
||||
maxRoomSize: 10,
|
||||
maxUsersPerRoom: 2
|
||||
}
|
||||
]);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "setPermissions", {
|
||||
accID: resp[1].accID,
|
||||
rights: 5
|
||||
}, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getAccounts", {}, "ok", [
|
||||
{
|
||||
accID: 1,
|
||||
|
@ -179,29 +181,31 @@ const list = [
|
|||
name: "testUser1",
|
||||
viewable: true,
|
||||
deleted: false,
|
||||
deletedTime: 0,
|
||||
maxRooms: 2,
|
||||
maxRoomSize: 10,
|
||||
maxUsersPerRoom: 2
|
||||
}, {
|
||||
accID: null,
|
||||
accID: 3,
|
||||
rights: 5,
|
||||
name: "testUser2",
|
||||
viewable: true,
|
||||
deleted: true,
|
||||
deletedTime: null,
|
||||
maxRooms: 2,
|
||||
maxRoomSize: 10,
|
||||
maxUsersPerRoom: 2
|
||||
}
|
||||
]);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "addOTA", {
|
||||
token: "12345678",
|
||||
expires: uts() + 1,
|
||||
usesLeft: -1
|
||||
}, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getOTAs", {}, "ok", [
|
||||
{
|
||||
token: "12345678",
|
||||
|
@ -210,7 +214,7 @@ const list = [
|
|||
}
|
||||
]);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "addOTA", {
|
||||
token: "abc",
|
||||
expires: -1,
|
||||
|
@ -218,34 +222,34 @@ const list = [
|
|||
}, "ok", "");
|
||||
await wait(2000);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getOTAs", {}, "ok", [{
|
||||
token: "abc",
|
||||
expires: -1,
|
||||
usesLeft: -1
|
||||
}]);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "deleteOTA", { token: "abc" }, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "getOTAs", {}, "ok", []);
|
||||
}], ["room Owner", async (req) => {
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "createRoom", {
|
||||
room: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 1",
|
||||
description: "some desc",
|
||||
visibility: 0,
|
||||
icon: "shopping"
|
||||
}, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "createRoom", {
|
||||
room: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 1",
|
||||
description: "some desc",
|
||||
visibility: 0,
|
||||
|
@ -253,20 +257,20 @@ const list = [
|
|||
}, "error", act_error.ROOM_EXISTS);
|
||||
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "createRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 2",
|
||||
description: "some desc 2",
|
||||
visibility: 1,
|
||||
icon: ""
|
||||
}, "ok", "");
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "createRoom", {
|
||||
room: room3,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 2",
|
||||
description: "some desc 2",
|
||||
visibility: 1,
|
||||
|
@ -274,11 +278,11 @@ const list = [
|
|||
}, "error", act_error.ROOM_LIMIT);
|
||||
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "listRooms", {}, "ok", [
|
||||
{
|
||||
name: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 1",
|
||||
|
@ -289,7 +293,7 @@ const list = [
|
|||
confirmed: true
|
||||
}, {
|
||||
name: room2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 2",
|
||||
|
@ -301,32 +305,32 @@ const list = [
|
|||
}
|
||||
]);
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "deleteRoom", {
|
||||
room: room2 + "lol",
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "error", act_error.ROOM_NOT_EXISTS);
|
||||
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "deleteRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "ok", "");
|
||||
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "deleteRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "error", act_error.ROOM_NOT_EXISTS);
|
||||
|
||||
await req({
|
||||
"authorization": `Digest name=${name1} server=localhost:7224 accountKey=${accountKey}`
|
||||
"authorization": `Digest name=${name1} server=127.0.0.1:7224 accountKey=${accountKey}`
|
||||
}, "listRooms", {}, "ok", [
|
||||
{
|
||||
name: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 1",
|
||||
|
|
|
@ -17,33 +17,33 @@ const list = [
|
|||
["signup", async (handler, req, newHandler) => {
|
||||
await req(handler, "signup", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(handler, "signup", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.WRONG_STATE);
|
||||
await req(await newHandler(), "signup", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.ACCOUNT_EXISTS);
|
||||
await req(await newHandler(), "signup", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(await newHandler(), "signup", {
|
||||
name: name3,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.CONFIG);
|
||||
}], ["remote", async (handler, req, newHandler) => {
|
||||
await req(handler, "signin", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
let signature = (await req(handler, "createSignature", {
|
||||
|
@ -53,25 +53,25 @@ const list = [
|
|||
let h2 = await newHandler();
|
||||
await req(h2, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7223",
|
||||
server: "127.0.0.1:7223",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "error", act_error.SIGNATURE);
|
||||
await req(h2, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: falseSignature
|
||||
}, "error", act_error.SIGNATURE);
|
||||
let challenge = (await req(h2, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "ok", null)).challenge;
|
||||
await req(h2, "remote1", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
publicKey,
|
||||
sign: signature
|
||||
}, "error", act_error.WRONG_STATE);
|
||||
|
@ -84,7 +84,7 @@ const list = [
|
|||
}], ["account", async (handler, req, newHandler) => {
|
||||
await req(handler, "signin", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(handler, "getMyAccount", {}, "ok", {
|
||||
|
@ -98,7 +98,7 @@ const list = [
|
|||
let h2 = await newHandler();
|
||||
await req(h2, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(h2, "getMyAccount", {}, "ok", {
|
||||
|
@ -112,7 +112,7 @@ const list = [
|
|||
}], ["change account", async (handler, req, newHandler) => {
|
||||
await req(handler, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(handler, "changePassword", {
|
||||
|
@ -121,12 +121,12 @@ const list = [
|
|||
let h2 = await newHandler();
|
||||
await req(h2, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "error", act_error.AUTH);
|
||||
await req(h2, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey: accountKey + "lol"
|
||||
}, "ok", "");
|
||||
await req(h2, "deleteAccount", {}, "ok", "");
|
||||
|
@ -134,18 +134,18 @@ const list = [
|
|||
let h3 = await newHandler();
|
||||
await req(h3, "signin", {
|
||||
name: name2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey: accountKey + "lol"
|
||||
}, "error", act_error.AUTH);
|
||||
}], ["room Owner", async (handler, req, newHandler) => {
|
||||
await req(handler, "signin", {
|
||||
name: name1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
accountKey
|
||||
}, "ok", "");
|
||||
await req(handler, "createRoom", {
|
||||
room: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 1",
|
||||
description: "some desc",
|
||||
visibility: 0,
|
||||
|
@ -153,7 +153,7 @@ const list = [
|
|||
}, "ok", "");
|
||||
await req(handler, "createRoom", {
|
||||
room: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 1",
|
||||
description: "some desc",
|
||||
visibility: 0,
|
||||
|
@ -162,7 +162,7 @@ const list = [
|
|||
|
||||
await req(handler, "createRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 2",
|
||||
description: "some desc 2",
|
||||
visibility: 1,
|
||||
|
@ -171,7 +171,7 @@ const list = [
|
|||
|
||||
await req(handler, "createRoom", {
|
||||
room: room3,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
title: "Test Room 2",
|
||||
description: "some desc 2",
|
||||
visibility: 1,
|
||||
|
@ -181,7 +181,7 @@ const list = [
|
|||
await req(handler, "listRooms", {}, "ok", [
|
||||
{
|
||||
name: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 1",
|
||||
|
@ -192,7 +192,7 @@ const list = [
|
|||
confirmed: true
|
||||
}, {
|
||||
name: room2,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 2",
|
||||
|
@ -205,20 +205,20 @@ const list = [
|
|||
]);
|
||||
await req(handler, "deleteRoom", {
|
||||
room: room2 + "lol",
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "error", act_error.ROOM_NOT_EXISTS);
|
||||
await req(handler, "deleteRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "ok", "");
|
||||
await req(handler, "deleteRoom", {
|
||||
room: room2,
|
||||
server: "localhost:7224"
|
||||
server: "127.0.0.1:7224"
|
||||
}, "error", act_error.ROOM_NOT_EXISTS);
|
||||
await req(handler, "listRooms", {}, "ok", [
|
||||
{
|
||||
name: room1,
|
||||
server: "localhost:7224",
|
||||
server: "127.0.0.1:7224",
|
||||
owner: name1,
|
||||
rights: 0b11111,
|
||||
title: "Test Room 1",
|
||||
|
|
Loading…
Reference in a new issue