From e3ae3233fee82d5601f3c355a290834be311dae8 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Mon, 23 Oct 2023 09:46:43 +0200 Subject: [PATCH] introduce file storage for pcloud with access to all files. current implementation doesn't work in my tests. --- src/Kp2aBusinessLogic/Io/PCloudFileStorage.cs | 24 +++++++++++++++--- .../javafilestorage/PCloudFileStorage.java | 16 +++++++++--- .../drawable-mdpi/ic_storage_pcloudall.png | Bin 0 -> 554 bytes .../drawable-xhdpi/ic_storage_pcloudall.png | Bin 0 -> 1295 bytes .../Resources/values/strings.xml | 3 ++- src/keepass2android/app/App.cs | 3 ++- .../keepass2android-app.csproj | 6 +++++ 7 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 src/keepass2android/Resources/drawable-mdpi/ic_storage_pcloudall.png create mode 100644 src/keepass2android/Resources/drawable-xhdpi/ic_storage_pcloudall.png diff --git a/src/Kp2aBusinessLogic/Io/PCloudFileStorage.cs b/src/Kp2aBusinessLogic/Io/PCloudFileStorage.cs index 9f7449ef..efae6706 100644 --- a/src/Kp2aBusinessLogic/Io/PCloudFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/PCloudFileStorage.cs @@ -3,14 +3,15 @@ using Android.Content; namespace keepass2android.Io { - public partial class PCloudFileStorage: JavaFileStorage + public class PCloudFileStorage: JavaFileStorage { private const string ClientId = "CkRWTQXY6Lm"; public PCloudFileStorage(Context ctx, IKp2aApp app) : - base(new Keepass2android.Javafilestorage.PCloudFileStorage(ctx, ClientId), app) + base(new Keepass2android.Javafilestorage.PCloudFileStorage(ctx, ClientId, "pcloud", ""), app) { - } + + } public override bool UserShouldBackup @@ -18,6 +19,23 @@ namespace keepass2android.Io get { return false; } } } + public class PCloudFileStorageAll : JavaFileStorage + { + private const string ClientId = "FLm22de7bdS"; + + public PCloudFileStorageAll(Context ctx, IKp2aApp app) : + base(new Keepass2android.Javafilestorage.PCloudFileStorage(ctx, ClientId, "pcloudall", "PCLOUDALL_"), app) + { + + + } + + + public override bool UserShouldBackup + { + get { return false; } + } + } } #endif \ No newline at end of file diff --git a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/PCloudFileStorage.java b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/PCloudFileStorage.java index 60594045..2652a4ef 100644 --- a/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/PCloudFileStorage.java +++ b/src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/PCloudFileStorage.java @@ -48,11 +48,19 @@ public class PCloudFileStorage extends JavaFileStorageBase private ApiClient apiClient; private String clientId; + private String protocolId; - public PCloudFileStorage(Context ctx, String clientId) { + ///prefix for SHARED_PREF keys so we can distinguish between different instances + private String sharedPrefPrefix; + + public PCloudFileStorage(Context ctx, String clientId, String protocolId, String sharedPrefPrefix) { this.ctx = ctx; this.clientId = clientId; + this.protocolId = protocolId; + this.sharedPrefPrefix = sharedPrefPrefix; + this.apiClient = createApiClientFromSharedPrefs(); + android.util.Log.d("KP2A", "Init pcloud with protocol " + protocolId + ", prefix=" + sharedPrefPrefix + ", clientId=" + clientId); } @Override @@ -87,7 +95,8 @@ public class PCloudFileStorage extends JavaFileStorageBase @Override public String getProtocolId() { - return "pcloud"; + + return protocolId; } @Override @@ -239,6 +248,7 @@ public class PCloudFileStorage extends JavaFileStorageBase activity.getState().putBoolean("hasStartedAuth", true); } + } @Override @@ -279,7 +289,7 @@ public class PCloudFileStorage extends JavaFileStorageBase } private ApiClient createApiClientFromSharedPrefs() { - SharedPreferences prefs = this.ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE); + SharedPreferences prefs = this.ctx.getSharedPreferences(sharedPrefPrefix + SHARED_PREF_NAME, Context.MODE_PRIVATE); String authToken = prefs.getString(SHARED_PREF_AUTH_TOKEN, null); String apiHost = prefs.getString(SHARED_PREF_API_HOST, null); return this.createApiClient(authToken, apiHost); diff --git a/src/keepass2android/Resources/drawable-mdpi/ic_storage_pcloudall.png b/src/keepass2android/Resources/drawable-mdpi/ic_storage_pcloudall.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4decf4b946c464def37d093432b11f110eb719 GIT binary patch literal 554 zcmV+_0@eMAP)kdg00009a7bBm000fw z000fw0YWI7cmMzZ2XskIMF-*t8VUwB4EtN!0005WNklTt^%5@4N6l6F%Sx;XwA=Kg?O1n=5a-p0e9EsVFI;20*hXd&-#&MJs*j1M^grgYBNgC6f=^L;EP)*H?bisn-gIu>aYvpF79XG zlWA{`K0&cqL^woPgE~CHCv#oTU;>v=s|%4)EKYHS{df}=qBxZyjU%8A_Xq=TPV^i# zDhfSaf&KVo2+B#)P#<+@KyYrOI872Vpf1Dl!Wh)06JFVXx@-`H9q&nar2tz{ES8fR zpDaUh>njMcxQDvzB_l#05*a@5Kxs~*?~zI{NW%>jx3f%VxG{^X=z9%71d9-i;{nR& syGMKX@9c~8RQ*gj@q=LepWk6#0GB@NLN7IOYybcN07*qoM6N<$f+_jrasU7T literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable-xhdpi/ic_storage_pcloudall.png b/src/keepass2android/Resources/drawable-xhdpi/ic_storage_pcloudall.png new file mode 100644 index 0000000000000000000000000000000000000000..26806fcee733c04a3678c034245de2cd7331f5e9 GIT binary patch literal 1295 zcmV+q1@QWbP)<6NUHKwr$(C z`QzEPZGX?UF}7{nwr!)|Ojl}GlFHmf zpJFv91NQzy+KUyZ0;>@hoA{hI-8K5aQ5Jwz`d6=KS?xJXg7{h{Kn<9iOj}NbIM9(=3+Q+I{B}B?s*&z&1pgKmx7)ghb{Djh$w2 z5K*>MfG2r`8_w$Xk&TyGh_Hp%5al2RbdR$gnFEy2B*u_{MfTDD1hI4?dE9Z@vmLQ~YR@x+F~nmbVi^?2 zD*y2`(WkU_r``StaWOWINPOV2?xq)_e5-qJMqK>g#35?ABJCobF(kB4V{i1NEx(#z z@g3q}7<&<=q3)lFUq=4DTs&Tr18c{!CJ(RJ;P7b z)BTKrDtPKmZ2d{Z(q1bo?dMs1)b$2>6$xM+qCB9U=@A3nXzLFlmPfSWTp3m&K5qA3 zpIrp^SyAp)*Ukumj?0000K!JEh6Z%IAwBqan z(b(gDOKT&MK#q~pedzv>Ku@S^!r25OgKz%6-#&*y^d*6NESC_plk!FMK;&Vz&s{<5 z`;b5$V>0QSgK36@Fk5}?qXnWMZ?MPb-Ae*vD1-#^2TS$apTrJeA)F+WF{I`|a3D&v z*>VU8ptJh!M*^6}R781Cm*ZX}lv~yLbA&z=Oda(N2-vg8)sl}<(0;>17^@2w;`liQ zn(WM<;>Z6w>5xoSBmy;b(N7V}EjCbnzdP`O{ul{mtNx>cL}0Yj)0f-IbdqZ=p8d)N z^RBvba|nq*$IBh19buamSvtT%5(GJYh zh$Z~1K$(c<#iTas*Bcj37w4un;4l)AJB|IuL}9%1CsOlUh;s+G_^0dWFOU9v6OsAk zH7d%}mE(b)?Yu!6$JK#DNMufs%0F&~vy1;4M`Y(7IR zOQ&QB5}Ce~F(KlAc3_Q82loQ`b%u^ke_D|sFiK{gW-)TsO!F^PnhnTVv6BJ3%1zXy z!YLYYFJCYTIVbj0%=krarXiPwBeXCBFR?CEZ0Jsfj73m|}`4rkJiv{R`YaRG&v#87%++002ovPDHLk FV1ixycoYBt literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/values/strings.xml b/src/keepass2android/Resources/values/strings.xml index 52f858ae..4c5bf8c4 100644 --- a/src/keepass2android/Resources/values/strings.xml +++ b/src/keepass2android/Resources/values/strings.xml @@ -614,8 +614,9 @@ Google Drive Google Drive (KP2A files) If you do not want to give KP2A access to your full Google Drive, you may select this option. Note that you need to create a database file first, existing files are not visible to the app. Either choose this option from the Create database screen or, if you already opened a database, by exporting the database choosing this option. - PCloud + PCloud (KP2A folder) This storage type will only request access to the pCloud folder "Applications/Keepass2Android". If you want to use an existing database from your pCloud account, please make sure the file is placed in this pCloud folder. + PCloud (Full access) OneDrive OneDrive All files and shared files diff --git a/src/keepass2android/app/App.cs b/src/keepass2android/app/App.cs index 81b0aa7d..36d2810c 100644 --- a/src/keepass2android/app/App.cs +++ b/src/keepass2android/app/App.cs @@ -751,7 +751,8 @@ namespace keepass2android new NetFtpFileStorage(LocaleManager.LocalizedAppContext, this), new WebDavFileStorage(this), new PCloudFileStorage(LocaleManager.LocalizedAppContext, this), - new MegaFileStorage(App.Context), + new PCloudFileStorageAll(LocaleManager.LocalizedAppContext, this), + new MegaFileStorage(App.Context), //new LegacyWebDavStorage(this), //new LegacyFtpStorage(this), #endif diff --git a/src/keepass2android/keepass2android-app.csproj b/src/keepass2android/keepass2android-app.csproj index 07af894c..dcc1a912 100644 --- a/src/keepass2android/keepass2android-app.csproj +++ b/src/keepass2android/keepass2android-app.csproj @@ -1979,6 +1979,12 @@ Designer + + + + + +