1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-09-02 20:46:21 +02:00

Compare commits

...

16 Commits

Author SHA1 Message Date
Laurent Cozic
7b6a19ad28 Desktop release v2.14.23 2024-08-07 11:46:34 +01:00
Laurent Cozic
a6cc5bdaeb Desktop, Mobile, Cli: Disable sync version check to allow compatibility between 2.14 and 3.0 for users who cannot upgrade 2024-08-07 11:41:58 +01:00
Laurent Cozic
e579eb9560 Desktop release v2.14.22 2024-05-22 15:00:35 +01:00
Henry Heino
36aaf5a10c Chore: Fix CI build for x86 MacOS (#10453) 2024-05-21 15:15:50 +01:00
Laurent Cozic
2a76970461 Desktop release v2.14.21 2024-05-21 10:04:20 +01:00
Henry Heino
9fcaf5bd18 Desktop: Disable eval in pdf.js (#10450) 2024-05-21 10:00:17 +01:00
Henry Heino
3312bd27c9 Mobile: Simplify Dropbox sync workarond (#10415) 2024-05-12 10:01:02 +01:00
Laurent Cozic
ca8fd8d7ae iOS 12.14.8 2024-05-08 14:49:45 +01:00
Laurent Cozic
fb345b1317 Merge branch 'release-2.14' of github.com:laurent22/joplin into release-2.14 2024-05-08 14:39:59 +01:00
Laurent Cozic
966fe38ae3 iOS: Fixed app for iOS 12 2024-05-08 14:39:46 +01:00
Henry Heino
3042e615ac iOS: Fixes #10396: Fix Dropbox sync for large file collections (#10411) 2024-05-08 14:25:06 +01:00
Laurent Cozic
a3dc9c2721 iOS 12.14.7 2024-05-07 22:30:41 +01:00
Laurent Cozic
99caa014ca lock file 2024-05-07 17:23:45 +01:00
Laurent Cozic
00d0cd1cf7 Chore: Fix nan 2024-05-07 17:20:29 +01:00
Henry Heino
d6480e50d2 Mobile: Fixes #10396: Fix Dropbox sync (#10400) 2024-05-07 16:49:39 +01:00
Henry Heino
a1a06dd7d0 iOS: Add Privacy manifest file (#10406) 2024-05-07 11:00:06 +01:00
11 changed files with 153 additions and 46 deletions

View File

@@ -23,7 +23,7 @@ jobs:
matrix:
# Do not use unbuntu-latest because it causes `The operation was canceled` failures:
# https://github.com/actions/runner-images/issues/6709
os: [macos-latest, ubuntu-20.04, windows-2019]
os: [macos-12, ubuntu-20.04, windows-2019]
steps:
# Trying to fix random networking issues on Windows

View File

@@ -1,6 +1,6 @@
{
"name": "@joplin/app-desktop",
"version": "2.14.20",
"version": "2.14.23",
"description": "Joplin for Desktop",
"main": "main.js",
"private": true,
@@ -138,7 +138,7 @@
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"js-sha512": "0.8.0",
"nan": "2.18.0",
"nan": "2.19.0",
"react-test-renderer": "18.2.0",
"ts-node": "10.9.2",
"typescript": "5.2.2"

View File

@@ -17,6 +17,8 @@
AE152142260F770400217DCB /* ShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE152141260F770400217DCB /* ShareViewController.m */; };
AE82E4AF2599FA3A0013551B /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AE82E4AD2599FA3A0013551B /* MainInterface.storyboard */; };
AE82E4B32599FA3A0013551B /* ShareExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = AE82E4A82599FA3A0013551B /* ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
BAD33BAD2BE9A08300E9F46A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BAD33BAC2BE9A08300E9F46A /* PrivacyInfo.xcprivacy */; };
BAD33BAE2BE9A08300E9F46A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BAD33BAC2BE9A08300E9F46A /* PrivacyInfo.xcprivacy */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -76,6 +78,7 @@
AE82E4AE2599FA3A0013551B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
AE82E4B02599FA3A0013551B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B61798F36B3BC123BF8EA4D9 /* libPods-Joplin-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Joplin-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
BAD33BAC2BE9A08300E9F46A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F69B873C692CE22F1C4C9264 /* libPods-Joplin-JoplinTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Joplin-JoplinTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -160,6 +163,7 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
BAD33BAC2BE9A08300E9F46A /* PrivacyInfo.xcprivacy */,
13B07FAE1A68108700A75B9A /* Joplin */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* JoplinTests */,
@@ -300,6 +304,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BAD33BAD2BE9A08300E9F46A /* PrivacyInfo.xcprivacy in Resources */,
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
);
@@ -309,6 +314,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BAD33BAE2BE9A08300E9F46A /* PrivacyInfo.xcprivacy in Resources */,
AE82E4AF2599FA3A0013551B /* MainInterface.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -523,17 +529,19 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements;
CURRENT_PROJECT_VERSION = 113;
CURRENT_PROJECT_VERSION = 115;
DEVELOPMENT_TEAM = A9BXAFS6CT;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Joplin/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 12.14.6;
MARKETING_VERSION = 12.14.8;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin;
PRODUCT_NAME = Joplin;
@@ -552,16 +560,18 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements;
CURRENT_PROJECT_VERSION = 113;
CURRENT_PROJECT_VERSION = 115;
DEVELOPMENT_TEAM = A9BXAFS6CT;
INFOPLIST_FILE = Joplin/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 12.14.6;
MARKETING_VERSION = 12.14.8;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin;
PRODUCT_NAME = Joplin;
@@ -704,16 +714,23 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 113;
CURRENT_PROJECT_VERSION = 115;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A9BXAFS6CT;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = ShareExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 12.14.6;
MARKETING_VERSION = 12.14.8;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-l\"JoplinCommonShareExtension\"",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -735,15 +752,22 @@
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 113;
CURRENT_PROJECT_VERSION = 115;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A9BXAFS6CT;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = ShareExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 12.14.6;
MARKETING_VERSION = 12.14.8;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-l\"JoplinCommonShareExtension\"",
"-weak_framework",
SwiftUI,
);
PRODUCT_BUNDLE_IDENTIFIER = net.cozic.joplin.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;

View File

@@ -360,7 +360,7 @@ PODS:
- React-Core
- react-native-rsa-native (2.0.5):
- React
- react-native-saf-x (2.14.0):
- react-native-saf-x (2.14.1):
- React-Core
- react-native-safe-area-context (4.8.2):
- React-Core
@@ -790,7 +790,7 @@ SPEC CHECKSUMS:
react-native-image-resizer: 681f7607418b97c084ba2d0999b153b103040d8a
react-native-netinfo: 8a7fd3f7130ef4ad2fb4276d5c9f8d3f28d2df3d
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
react-native-saf-x: e0d30813901e54dad462dacda96555f725c2284f
react-native-saf-x: 3a4af99f10f0296e7d2319b5cdbf0d85547ab125
react-native-safe-area-context: 0ee144a6170530ccc37a0fd9388e28d06f516a89
react-native-slider: ae9441a884f8465762f1f68d31eafad42663adb4
react-native-sqlite-storage: f6d515e1c446d1e6d026aa5352908a25d4de3261
@@ -830,4 +830,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 3b2cace838120977b5b54871752c9dddf5a11cea
COCOAPODS: 1.12.1
COCOAPODS: 1.15.2

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<!--
react-native-fs is unmaintained and doesn't have a privacy manifest.
Include the APIs it accesses here.
See https://github.com/itinance/react-native-fs/issues/1232 for details.
-->
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
</dict>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View File

@@ -130,16 +130,31 @@ class FileApiDriverDropbox {
// support POST requests with an empty body:
//
// https://www.dropboxforum.com/t5/Dropbox-API-Support-Feedback/Error-1017-quot-cannot-parse-response-quot/td-p/589595
const needsFetchWorkaround = shim.mobilePlatform() === 'ios';
const response = await this.api().exec(
'GET',
'files/download',
null,
{
'Dropbox-API-Arg': JSON.stringify({ path: this.makePath_(path) }),
},
options,
);
const fetchPath = (method, path, extraHeaders) => {
return this.api().exec(
method,
'files/download',
null,
{ 'Dropbox-API-Arg': JSON.stringify({ path: this.makePath_(path) }), ...extraHeaders },
options,
);
};
let response;
if (!needsFetchWorkaround) {
response = await fetchPath('POST', path);
} else {
// Use a random If-None-Match value to prevent React Native from using the cache.
// Passing "cache: no-store" doesn't seem to be sufficient, so If-None-Match is set to a value
// that will never match the ETag.
//
// Something similar is done for WebDAV.
//
// See https://github.com/laurent22/joplin/issues/10396
response = await fetchPath('GET', path, { 'If-None-Match': `JoplinIgnore-${Math.floor(Math.random() * 100000)}` });
}
return response;
} catch (error) {
if (this.hasErrorCode_(error, 'not_found')) {

View File

@@ -6,9 +6,6 @@ import { State } from '../../reducer';
import { PublicPrivateKeyPair } from '../e2ee/ppk';
import { MasterKeyEntity } from '../e2ee/types';
import { compareVersions } from 'compare-versions';
import { _ } from '../../locale';
import JoplinError from '../../JoplinError';
import { ErrorCode } from '../../errors';
const fastDeepEqual = require('fast-deep-equal');
const logger = Logger.create('syncInfoUtils');
@@ -427,6 +424,8 @@ export function masterKeyById(id: string) {
return localSyncInfo().masterKeys.find(mk => mk.id === id);
}
export const checkIfCanSync = (s: SyncInfo, appVersion: string) => {
if (compareVersions(appVersion, s.appMinVersion) < 0) throw new JoplinError(_('In order to synchronise, please upgrade your application to version %s+', s.appMinVersion), ErrorCode.MustUpgradeApp);
export const checkIfCanSync = (_s: SyncInfo, _appVersion: string) => {
// Disabled to allow compatibility between 2.14 and 3.0 for users who can't upgrade
// if (compareVersions(appVersion, s.appMinVersion) < 0) throw new JoplinError(_('In order to synchronise, please upgrade your application to version %s+', s.appMinVersion), ErrorCode.MustUpgradeApp);
};

View File

@@ -736,8 +736,16 @@ function shimInit(options: ShimInitOptions = null) {
}
};
const getPdfJsDocument = (path: string) => {
return pdfJs.getDocument({
url: path,
// IMPORTANT: Set to false to mitigate CVE-2024-4367.
isEvalSupported: false,
});
};
shim.pdfExtractEmbeddedText = async (pdfPath: string): Promise<string[]> => {
const loadingTask = pdfJs.getDocument(pdfPath);
const loadingTask = getPdfJsDocument(pdfPath);
const doc = await loadingTask.promise;
const textByPage = [];
@@ -791,7 +799,7 @@ function shimInit(options: ShimInitOptions = null) {
const filePrefix = `page_${Date.now()}`;
const output: string[] = [];
const loadingTask = pdfJs.getDocument(pdfPath);
const loadingTask = getPdfJsDocument(pdfPath);
const doc = await loadingTask.promise;
try {

View File

@@ -20,9 +20,9 @@ export default class PdfDocument {
this.rendererMutex = withTimeout(new Mutex(), 40 * 1000);
}
public loadDoc = async (url: string | Uint8Array) => {
public loadDoc = async (url: string) => {
this.url = url;
const loadingTask = pdfjsLib.getDocument(url);
const loadingTask = pdfjsLib.getDocument({ url, isEvalSupported: false });
try {
const pdfDocument: any = await loadingTask.promise;
this.doc = pdfDocument;

View File

@@ -1,5 +1,16 @@
# Joplin iOS Changelog
## [ios-v12.14.8](https://github.com/laurent22/joplin/releases/tag/ios-v12.14.8) - 2024-05-08T13:40:01Z
- Fixed: Fix Dropbox sync for large file collections (#10411) (#10396 by Henry Heino)
- Fixed: Fixed app for iOS 12 (966fe38)
## [ios-v12.14.7](https://github.com/laurent22/joplin/releases/tag/ios-v12.14.7) - 2024-05-07T16:24:05Z
- New: Add Privacy manifest file (#10406 by Henry Heino)
- Fixed: Allow pasting URLs copied from the share sheet (#10048) (#10047 by Henry Heino)
- Fixed: Fix Dropbox sync (#10400) (#10396 by Henry Heino)
## [ios-v12.14.6](https://github.com/laurent22/joplin/releases/tag/ios-v12.14.6) - 2024-03-01T18:04:47Z
- Improved: Immediately sort notes after toggling a checkbox (5820f63)

View File

@@ -6570,7 +6570,7 @@ __metadata:
md5: 2.3.0
moment: 2.30.1
mustache: 4.2.0
nan: 2.18.0
nan: 2.19.0
node-fetch: 2.6.7
node-notifier: 10.0.1
node-rsa: 1.1.1
@@ -30959,21 +30959,12 @@ __metadata:
languageName: node
linkType: hard
"nan@npm:2.18.0, nan@npm:^2.17.0":
version: 2.18.0
resolution: "nan@npm:2.18.0"
"nan@npm:2.19.0, nan@npm:^2.12.1, nan@npm:^2.17.0":
version: 2.19.0
resolution: "nan@npm:2.19.0"
dependencies:
node-gyp: latest
checksum: 4fe42f58456504eab3105c04a5cffb72066b5f22bd45decf33523cb17e7d6abc33cca2a19829407b9000539c5cb25f410312d4dc5b30220167a3594896ea6a0a
languageName: node
linkType: hard
"nan@npm:^2.12.1":
version: 2.17.0
resolution: "nan@npm:2.17.0"
dependencies:
node-gyp: latest
checksum: ec609aeaf7e68b76592a3ba96b372aa7f5df5b056c1e37410b0f1deefbab5a57a922061e2c5b369bae9c7c6b5e6eecf4ad2dac8833a1a7d3a751e0a7c7f849ed
checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600
languageName: node
linkType: hard