Fixed some minor issues

master
WolverinDEV 2021-02-26 19:54:07 +01:00
parent e8f23ec609
commit 2cf94eaf4b
5 changed files with 45 additions and 8 deletions

View File

@ -2,7 +2,14 @@ import * as loader from "tc-loader";
import {Stage} from "tc-loader";
import {config} from "tc-shared/i18n/localize";
import {getBackend} from "tc-shared/backend";
import {ClientServiceConfig, ClientServiceInvite, ClientServices, ClientSessionType, LocalAgent} from "tc-services";
import {
ClientServiceConfig,
ClientServiceInvite,
ClientServices,
ClientSessionType,
initializeClientServices,
LocalAgent
} from "tc-services";
import translation_config = config.translation_config;
@ -12,6 +19,7 @@ export let clientServiceInvite: ClientServiceInvite;
loader.register_task(Stage.JAVASCRIPT_INITIALIZING, {
priority: 30,
function: async () => {
initializeClientServices();
clientServices = new ClientServices(new class implements ClientServiceConfig {
getServiceHost(): string {
//return "localhost:1244";

View File

@ -142,6 +142,8 @@ export enum ErrorCode {
SERVER_CONNECT_BANNED = 0xD01,
BAN_FLOODING = 0xD03,
TOKEN_INVALID_ID = 0xF00,
TOKEN_EXPIRED = 0xf10,
TOKEN_USE_LIMIT_EXCEEDED = 0xf11,
WEB_HANDSHAKE_INVALID = 0x1000,
WEB_HANDSHAKE_UNSUPPORTED = 0x1001,
WEB_HANDSHAKE_IDENTITY_UNSUPPORTED = 0x1002,

View File

@ -51,6 +51,8 @@ import "./clientservice";
import "./text/bbcode/InviteController";
import {clientServiceInvite} from "tc-shared/clientservice";
import {ActionResult} from "tc-services";
import {CommandResult} from "tc-shared/connection/ServerConnectionDeclaration";
import {ErrorCode} from "tc-shared/connection/ErrorCode";
assertMainApplication();
@ -218,6 +220,8 @@ async function doHandleConnectRequest(serverAddress: string, serverUniqueId: str
const channel = parameters.getValue(AppParameters.KEY_CONNECT_CHANNEL, undefined);
const channelPassword = parameters.getValue(AppParameters.KEY_CONNECT_CHANNEL_PASSWORD, undefined);
const connectToken = parameters.getValue(AppParameters.KEY_CONNECT_TOKEN, undefined);
if(!targetServerConnection) {
targetServerConnection = server_connections.getActiveConnectionHandler();
if(targetServerConnection.connected) {
@ -229,12 +233,29 @@ async function doHandleConnectRequest(serverAddress: string, serverUniqueId: str
if(targetServerConnection.getCurrentServerUniqueId() === serverUniqueId) {
/* Just join the new channel and may use the token (before) */
/* TODO: Use the token! */
let containsToken = false;
if(connectToken) {
try {
await targetServerConnection.serverConnection.send_command("tokenuse", { token: connectToken }, { process_result: false });
} catch (error) {
if(error instanceof CommandResult) {
if(error.id === ErrorCode.TOKEN_INVALID_ID) {
targetServerConnection.log.log("error.custom", { message: tr("Try to use invite key token but the token is invalid.")});
} else if(error.id == ErrorCode.TOKEN_EXPIRED) {
targetServerConnection.log.log("error.custom", { message: tr("Try to use invite key token but the token is expired.")});
} else if(error.id === ErrorCode.TOKEN_USE_LIMIT_EXCEEDED) {
targetServerConnection.log.log("error.custom", { message: tr("Try to use invite key token but the token has been used too many times.")});
} else {
targetServerConnection.log.log("error.custom", { message: tra("Try to use invite key token but an error occurred: {}", error.formattedMessage())});
}
} else {
logError(LogCategory.GENERAL, tr("Failed to use token: {}"), error);
}
}
}
if(!channel) {
/* No need to join any channel */
if(!containsToken) {
if(!connectToken) {
createInfoModal(tr("Already connected"), tr("You're already connected to the target server.")).open();
} else {
/* Don't show a message since a token has been used */
@ -263,7 +284,8 @@ async function doHandleConnectRequest(serverAddress: string, serverUniqueId: str
}
targetChannel.setCachedHashedPassword(channelPassword);
if(await targetChannel.joinChannel()) {
/* Force join the channel. Either we have the password, can ignore the password or we don't want to join. */
if(await targetChannel.joinChannel(true)) {
return { status: "success" };
} else {
/* TODO: More detail? */
@ -277,7 +299,7 @@ async function doHandleConnectRequest(serverAddress: string, serverUniqueId: str
nicknameSpecified: false,
profile: profile,
token: undefined,
token: connectToken,
serverPassword: serverPassword,
serverPasswordHashed: passwordsHashed,

View File

@ -1,4 +1,3 @@
import * as log from "../log";
import {LogCategory, logDebug, logTrace, logWarn} from "../log";
import {
CodeToken,

View File

@ -699,7 +699,9 @@ export class ChannelEntry extends ChannelTreeEntry<ChannelEvents> {
}
let passwordPrompted = false;
if(this.properties.channel_flag_password === true && !this.cachedPasswordHash && !ignorePasswordFlag) {
passwordPrompted = true;
const password = await this.requestChannelPassword(PermissionType.B_CHANNEL_JOIN_IGNORE_PASSWORD);
if(typeof password === "undefined") {
/* aborted */
@ -717,8 +719,12 @@ export class ChannelEntry extends ChannelTreeEntry<ChannelEvents> {
return true;
} catch (error) {
if(error instanceof CommandResult) {
if(error.id == ErrorCode.CHANNEL_INVALID_PASSWORD) { //Invalid password
if(error.id == ErrorCode.CHANNEL_INVALID_PASSWORD) {
this.invalidateCachedPassword();
if(!passwordPrompted) {
/* It seems like our cached password isn't valid any more */
return await this.joinChannel(false);
}
}
}
return false;