Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
constructor(private readonly baseUrl: string, public accessTokenStore: AccessTokenStore) {
super();
this.connectionState = ConnectionState.UNDEFINED;
this.logger = logdown('@wireapp/api-client/http/HttpClient', {
logger: console,
markdown: false,
});
this.requestQueue = new PriorityQueue({
maxRetries: 0,
retryDelay: TimeUtil.TimeInMillis.SECOND,
});
// Log all failing HTTP requests
axios.interceptors.response.use(undefined, (error: AxiosError) => {
let backendResponse = '';
if (error.response) {
try {
backendResponse = JSON.stringify(error.response.data);
} finally {
this.logger.error(
`HTTP Error (${error.response.status}) on '${error.response.config.url}': ${error.message} (${backendResponse})`,
);
}
}
RED: 4,
YELLOW: 3,
};
export class Configuration {
readonly APP_BASE = env.APP_BASE || 'https://app.wire.com';
readonly APP_NAME = env.APP_NAME || 'Webapp';
readonly APP_INSTANCE_ID = UUID();
readonly BACKEND_REST = env.BACKEND_REST || 'https://prod-nginz-https.wire.com';
readonly BACKEND_WS = env.BACKEND_WS || 'wss://prod-nginz-ssl.wire.com';
readonly BRAND_NAME = env.BRAND_NAME || 'Wire';
readonly ENVIRONMENT = env.ENVIRONMENT || 'production';
readonly FEATURE = env.FEATURE;
readonly MAX_GROUP_PARTICIPANTS = env.MAX_GROUP_PARTICIPANTS || 500;
readonly MAX_VIDEO_PARTICIPANTS = env.MAX_VIDEO_PARTICIPANTS || 4;
readonly NEW_PASSWORD_MINIMUM_LENGTH = env.NEW_PASSWORD_MINIMUM_LENGTH || ValidationUtil.DEFAULT_PASSWORD_MIN_LENGTH;
readonly URL = env.URL || {
ACCOUNT_BASE: 'https://account.wire.com',
MOBILE_BASE: '',
SUPPORT_BASE: 'https://support.wire.com',
TEAMS_BASE: 'https://teams.wire.com',
WEBSITE_BASE: 'https://wire.com',
};
readonly VERSION = env.VERSION || '0.0.0';
// 10 seconds until phone code expires
readonly LOGIN_CODE_EXPIRATION = 10 * 60;
// 25 megabyte upload limit for personal use (private users & guests)
readonly MAXIMUM_ASSET_FILE_SIZE_PERSONAL = 25 * 1024 * 1024;
// 100 megabyte upload limit for organizations (team members)
throw new Error('Only a webview can have its storage wiped');
}
logger.log(`Deleting session data for account "${accountId}"...`);
await clearStorage(webviewWebcontent.session);
logger.log(`Deleted session data for account "${accountId}".`);
} catch (error) {
logger.error(`Failed to delete session data for account "${accountId}", reason: "${error.message}".`);
}
// Delete the webview partition
// Note: The first account always uses the default session,
// therefore partitionId is optional
// ToDo: Move the first account to a partition
if (partitionId) {
try {
if (!ValidationUtil.isUUIDv4(partitionId)) {
throw new Error('Partition is not an UUID');
}
const partitionDir = path.join(USER_DATA_DIR, 'Partitions', partitionId);
await fs.remove(partitionDir);
logger.log(`Deleted partition "${partitionId}" for account "${accountId}".`);
} catch (error) {
logger.log(`Unable to delete partition "${partitionId}" for account "${accountId}", reason: "${error.message}".`);
}
}
// Delete logs for this account
try {
if (!ValidationUtil.isUUIDv4(accountId)) {
throw new Error('Account is not an UUID');
}
const sessionFolder = path.join(LOG_DIR, accountId);
if (partitionId) {
try {
if (!ValidationUtil.isUUIDv4(partitionId)) {
throw new Error('Partition is not an UUID');
}
const partitionDir = path.join(USER_DATA_DIR, 'Partitions', partitionId);
await fs.remove(partitionDir);
logger.log(`Deleted partition "${partitionId}" for account "${accountId}".`);
} catch (error) {
logger.log(`Unable to delete partition "${partitionId}" for account "${accountId}", reason: "${error.message}".`);
}
}
// Delete logs for this account
try {
if (!ValidationUtil.isUUIDv4(accountId)) {
throw new Error('Account is not an UUID');
}
const sessionFolder = path.join(LOG_DIR, accountId);
await fs.remove(sessionFolder);
logger.log(`Deleted logs folder for account "${accountId}".`);
} catch (error) {
logger.error(`Failed to delete logs folder for account "${accountId}", reason: "${error.message}".`);
}
}
(async () => {
const CONVERSATION_ID = program.conversationId || process.env.WIRE_CONVERSATION_ID;
const MESSAGE_TIMER = TimeUtil.TimeInMillis.SECOND * 5;
const login = {
clientType: ClientType.TEMPORARY,
email: process.env.WIRE_EMAIL,
password: process.env.WIRE_PASSWORD,
};
const backend = process.env.WIRE_BACKEND === 'staging' ? APIClient.BACKEND.STAGING : APIClient.BACKEND.PRODUCTION;
const engine = new FileEngine(path.join(__dirname, '.tmp', 'sender'));
await engine.init(undefined, {fileExtension: '.json'});
const apiClient = new APIClient({store: engine, urls: backend});
const account = new Account(apiClient);
await account.login(login);
await account.listen();
_validatePassword(password) {
return new RegExp(ValidationUtil.getNewPasswordPattern(this.minPasswordLength)).test(password);
}
function isSupportedBrowser(userAgent: string): boolean {
const parsedUserAgent = parseUserAgent(userAgent);
if (!parsedUserAgent) {
return false;
}
const invalidBrowser = parsedUserAgent.is.mobile || parsedUserAgent.is.franz;
if (invalidBrowser) {
return false;
}
const browserName = parsedUserAgent.browser.name.toLowerCase();
const supportedBrowserVersionObject = CommonConfig.WEBAPP_SUPPORTED_BROWSERS[browserName];
const supportedBrowserVersion = supportedBrowserVersionObject?.major;
try {
const browserVersionString = (parsedUserAgent.browser.version.split('.') || [])[0];
const browserVersion = parseInt(browserVersionString, 10);
return supportedBrowserVersion ? browserVersion >= supportedBrowserVersion : false;
} catch (err) {
return false;
}
}
private static emit(): void {
if (Runtime.isNode()) {
CookieStore.emitter.emit(CookieStore.TOPIC.COOKIE_REFRESH, CookieStore.cookie);
}
}
function getLogger(name: string): Logger {
return LogFactory.getLogger(name, {
namespace: LOGGER_NAMESPACE,
separator: '/',
});
}
function getLogger(name: string): Logger {
return LogFactory.getLogger(name, {
namespace: LOGGER_NAMESPACE,
separator: '/',
});
}