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

SK-278 added storing of refresh_token, moved auth flow to http #138

Merged
merged 19 commits into from
Jan 20, 2025
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
3 changes: 1 addition & 2 deletions src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@ export default function App() {
dispatch(setSelectedConversation({}));
}
if (history.location.pathname === "/authorization") {
const token = localStorage.getItem("sessionId");
autoLoginService.userLogin(token);
autoLoginService.userLoginByToken();
}
});

Expand Down
148 changes: 88 additions & 60 deletions src/api/api.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import buildHttpUrl from "@utils/navigation/build_http_url";
import getBrowserFingerprint from "get-browser-fingerprint";
import getUniqueId from "@api/uuid";
import { default as EventEmitter } from "@event/eventEmitter";
Expand All @@ -18,6 +19,10 @@ class Api {
this.onConversationCreateListener = null;
this.onConversationUpdateListener = null;
this.onConversationDeleteListener = null;
this.deviceId = getBrowserFingerprint({
enableScreen: false,
hardwareOnly: true,
}).toString();
}

async connect() {
Expand Down Expand Up @@ -158,7 +163,7 @@ class Api {
});
}

async sendPromise(req, key) {
async #sendPromise(req, key) {
return new Promise((resolve, reject) => {
this.socket.send(JSON.stringify(req));
console.log("[socket.send]", req);
Expand All @@ -170,30 +175,49 @@ class Api {
});
}

async userLogin(data) {
async #sendHttpPromise(method, endpoint, data) {
console.log("[http.request]", { request: data });
const accessToken = localStorage.getItem("sessionId");

const params = {
method,
credentials: "include",
headers: { "Content-Type": "application/json" },
};
accessToken && (params.headers["Authorization"] = `Bearer ${accessToken}`);
data && (params["body"] = JSON.stringify(data));

const response = await fetch(`${buildHttpUrl()}/${endpoint}`, params);

const responseData = await response.json();
console.log("[http.response]", { response: responseData });

return responseData;
}

async connectSocket(data) {
const requestData = {
request: {
user_login: data.token
? {
token: data.token,
deviceId: getBrowserFingerprint({
enableScreen: false,
hardwareOnly: true,
}),
}
: {
login: data.login,
password: data.password,
deviceId: getBrowserFingerprint({
enableScreen: false,
hardwareOnly: true,
}),
},
id: getUniqueId("userLogin"),
connect: {
token: data.token,
device_id: this.deviceId,
},
id: getUniqueId("connectSocket"),
},
};
const resObjKey = null;
return this.sendPromise(requestData, resObjKey);
const resObjKey = "success";
return this.#sendPromise(requestData, resObjKey);
}

async disconnectSocket() {
const requestData = {
request: {
user_logout: {},
id: getUniqueId("disconnectSocket"),
},
};
const resObjKey = "success";
return this.#sendPromise(requestData, resObjKey);
}

async userCreate(data) {
Expand All @@ -207,7 +231,7 @@ class Api {
},
};
const resObjKey = "user";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async userEdit(data) {
Expand All @@ -218,18 +242,28 @@ class Api {
},
};
const resObjKey = "user";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async userLogin(data) {
const { login, password } = data || {};

const currentTime = Date.now();
const tokenExpiredAt =
localStorage.getItem("sessionExpiredAt") || currentTime;
if (tokenExpiredAt - currentTime <= 0) localStorage.removeItem("sessionId");

const requestData = { device_id: this.deviceId };
if (login && password) {
requestData.login = login;
requestData.password = password;
}

return await this.#sendHttpPromise("POST", "login", requestData);
}

async userLogout() {
const requestData = {
request: {
user_logout: {},
id: getUniqueId("userLogout"),
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return await this.#sendHttpPromise("POST", "logout", null);
}

async userDelete() {
Expand All @@ -241,7 +275,7 @@ class Api {
};
const resObjKey = "success";
localStorage.removeItem("sessionId");
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async userSearch(data) {
Expand All @@ -258,7 +292,7 @@ class Api {
if (data.updated_at)
requestData.request.user_search["updated_at"] = data.updated_at;
const resObjKey = "users";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async getUsersByIds(data) {
Expand All @@ -271,7 +305,7 @@ class Api {
},
};
const resObjKey = "users";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async getParticipantsByCids(data) {
Expand All @@ -285,7 +319,7 @@ class Api {
};

const resObjKey = "users";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async createUploadUrlForFiles(data) {
Expand All @@ -296,7 +330,7 @@ class Api {
},
};
const resObjKey = "files";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async getDownloadUrlForFiles(data) {
Expand All @@ -309,7 +343,7 @@ class Api {
},
};
const resObjKey = "file_urls";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async messageCreate(data) {
Expand Down Expand Up @@ -340,7 +374,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async messageList(data) {
Expand All @@ -357,7 +391,7 @@ class Api {
(requestData.request.message_list["updated_at"] = data.updated_at);

const resObjKey = "messages";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async markConversationAsRead(data) {
Expand All @@ -371,7 +405,7 @@ class Api {
};

const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async messageDelete(data) {
Expand All @@ -388,7 +422,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async subscribeToUserActivity(data) {
Expand All @@ -401,7 +435,7 @@ class Api {
},
};
const resObjKey = "last_activity";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async unsubscribeFromUserActivity(data) {
Expand All @@ -412,7 +446,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async statusRead(data) {
Expand All @@ -426,7 +460,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async statusDelivered(data) {
Expand All @@ -440,7 +474,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async sendTypingStatus(data) {
Expand Down Expand Up @@ -472,7 +506,7 @@ class Api {
},
};
const resObjKey = "conversation";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async conversationUpdate(data) {
Expand All @@ -492,7 +526,7 @@ class Api {
},
};
const resObjKey = "conversation";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async conversationList(data) {
Expand All @@ -507,7 +541,7 @@ class Api {
requestData.request.conversation_list["updated_at"]["gt"] =
data.updated_at;
const resObjKey = "conversations";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async conversationDelete(data) {
Expand All @@ -520,7 +554,7 @@ class Api {
},
};
const resObjKey = "success";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async conversationSearch(data) {
Expand All @@ -533,7 +567,7 @@ class Api {
},
};
const resObjKey = "conversations";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async pushSubscriptionCreate(data) {
Expand All @@ -544,34 +578,28 @@ class Api {
web_endpoint: data.web_endpoint,
web_key_auth: data.web_key_auth,
web_key_p256dh: data.web_key_p256dh,
device_udid: getBrowserFingerprint({
enableScreen: false,
hardwareOnly: true,
})?.toString(),
device_udid: this.deviceId,
},
id: getUniqueId("pushSubscriptionCreate"),
},
};

const resObjKey = "subscription";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}

async pushSubscriptionDelete(data) {
const requestData = {
request: {
push_subscription_delete: {
device_udid: getBrowserFingerprint({
enableScreen: false,
hardwareOnly: true,
})?.toString(),
device_udid: this.deviceId,
},
id: getUniqueId("pushSubscriptionDelete"),
},
};

const resObjKey = "";
return this.sendPromise(requestData, resObjKey);
return this.#sendPromise(requestData, resObjKey);
}
}

Expand Down
Loading