mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
fix: user-agent format (#27488)
* fix: user-agent format * ci: fix static analysis --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
@@ -53,7 +53,7 @@ import javax.net.ssl.TrustManagerFactory
|
|||||||
import javax.net.ssl.X509KeyManager
|
import javax.net.ssl.X509KeyManager
|
||||||
import javax.net.ssl.X509TrustManager
|
import javax.net.ssl.X509TrustManager
|
||||||
|
|
||||||
const val USER_AGENT = "Immich_Android_${BuildConfig.VERSION_NAME}"
|
const val USER_AGENT = "immich-android/${BuildConfig.VERSION_NAME}"
|
||||||
private const val CERT_ALIAS = "client_cert"
|
private const val CERT_ALIAS = "client_cert"
|
||||||
private const val PREFS_NAME = "immich.ssl"
|
private const val PREFS_NAME = "immich.ssl"
|
||||||
private const val PREFS_CERT_ALIAS = "immich.client_cert"
|
private const val PREFS_CERT_ALIAS = "immich.client_cert"
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ extension UserDefaults {
|
|||||||
/// Old sessions are kept alive by Dart's FFI retain until all isolates release them.
|
/// Old sessions are kept alive by Dart's FFI retain until all isolates release them.
|
||||||
class URLSessionManager: NSObject {
|
class URLSessionManager: NSObject {
|
||||||
static let shared = URLSessionManager()
|
static let shared = URLSessionManager()
|
||||||
|
|
||||||
private(set) var session: URLSession
|
private(set) var session: URLSession
|
||||||
let delegate: URLSessionManagerDelegate
|
let delegate: URLSessionManagerDelegate
|
||||||
private static let cacheDir: URL = {
|
private static let cacheDir: URL = {
|
||||||
@@ -53,7 +53,7 @@ class URLSessionManager: NSObject {
|
|||||||
)
|
)
|
||||||
static let userAgent: String = {
|
static let userAgent: String = {
|
||||||
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown"
|
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown"
|
||||||
return "Immich_iOS_\(version)"
|
return "immich-ios/\(version)"
|
||||||
}()
|
}()
|
||||||
static let cookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: APP_GROUP)
|
static let cookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: APP_GROUP)
|
||||||
private static var serverUrls: [String] = []
|
private static var serverUrls: [String] = []
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
import 'dart:io' show Platform;
|
import 'dart:io' show Platform;
|
||||||
|
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
Future<String> getUserAgentString() async {
|
Future<String> getUserAgentString() async {
|
||||||
final packageInfo = await PackageInfo.fromPlatform();
|
final packageInfo = await PackageInfo.fromPlatform();
|
||||||
String platform;
|
String platform;
|
||||||
if (Platform.isAndroid) {
|
if (Platform.isAndroid) {
|
||||||
platform = 'Android';
|
platform = 'android';
|
||||||
} else if (Platform.isIOS) {
|
} else if (Platform.isIOS) {
|
||||||
platform = 'iOS';
|
platform = 'ios';
|
||||||
} else {
|
} else {
|
||||||
platform = 'Unknown';
|
platform = 'unknown';
|
||||||
}
|
}
|
||||||
return 'Immich_${platform}_${packageInfo.version}';
|
return 'immich-$platform/${packageInfo.version}';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import { getAppVersionFromUA } from 'src/utils/request';
|
||||||
|
|
||||||
|
describe(getAppVersionFromUA.name, () => {
|
||||||
|
it('should get the app version for android', () => {
|
||||||
|
expect(getAppVersionFromUA('immich-android/1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get the app version for ios', () => {
|
||||||
|
expect(getAppVersionFromUA('immich-ios/1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get the app version for unknown', () => {
|
||||||
|
expect(getAppVersionFromUA('immich-unknown/1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('legacy format', () => {
|
||||||
|
it('should get the app version from the old android format', () => {
|
||||||
|
expect(getAppVersionFromUA('Immich_Android_1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get the app version from the old ios format', () => {
|
||||||
|
expect(getAppVersionFromUA('Immich_iOS_1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should get the app version from the old unknown format', () => {
|
||||||
|
expect(getAppVersionFromUA('Immich_Unknown_1.123.4')).toEqual('1.123.4');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -7,8 +7,11 @@ export const fromChecksum = (checksum: string): Buffer => {
|
|||||||
|
|
||||||
export const fromMaybeArray = <T>(param: T | T[]) => (Array.isArray(param) ? param[0] : param);
|
export const fromMaybeArray = <T>(param: T | T[]) => (Array.isArray(param) ? param[0] : param);
|
||||||
|
|
||||||
const getAppVersionFromUA = (ua: string) =>
|
export const getAppVersionFromUA = (ua: string) =>
|
||||||
ua.match(/^Immich_(?:Android|iOS)_(?<appVersion>.+)$/)?.groups?.appVersion ?? null;
|
ua.match(/^immich-(?:android|ios|unknown)\/(?<appVersion>.+)$/)?.groups?.appVersion ??
|
||||||
|
// legacy format
|
||||||
|
ua.match(/^Immich_(?:Android|iOS|Unknown)_(?<appVersion>.+)$/)?.groups?.appVersion ??
|
||||||
|
null;
|
||||||
|
|
||||||
export const getUserAgentDetails = (headers: IncomingHttpHeaders) => {
|
export const getUserAgentDetails = (headers: IncomingHttpHeaders) => {
|
||||||
const userAgent = UAParser(headers['user-agent']);
|
const userAgent = UAParser(headers['user-agent']);
|
||||||
|
|||||||
Reference in New Issue
Block a user