attempt to integrate pulickey auth

This commit is contained in:
Philipp Crocoll
2018-09-10 12:57:17 +02:00
parent fcf1214f80
commit f5f99f5a04
8 changed files with 73 additions and 10 deletions

View File

@@ -55,8 +55,8 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-release.aar"> <LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-debug.aar">
<Link>Jars\JavaFileStorage-release.aar</Link> <Link>Jars\JavaFileStorage-debug.aar</Link>
</LibraryProjectZip> </LibraryProjectZip>
<None Include="Jars\AboutJars.txt" /> <None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" /> <None Include="Additions\AboutAdditions.txt" />

View File

@@ -5,8 +5,8 @@ namespace keepass2android.Io
{ {
public class SftpFileStorage: JavaFileStorage public class SftpFileStorage: JavaFileStorage
{ {
public SftpFileStorage(IKp2aApp app) : public SftpFileStorage(Context ctx, IKp2aApp app) :
base(new Keepass2android.Javafilestorage.SftpStorage(), app) base(new Keepass2android.Javafilestorage.SftpStorage(ctx.ApplicationContext), app)
{ {
} }

View File

@@ -15,7 +15,7 @@
<application> <application>
<activity <activity
android:name=".NotifSlave" android:name=".NotifSlave"
android:label="@string/title_activity_notif_slave"></activity> android:label="Keepass2Android"></activity>
</application> </application>
</manifest> </manifest>

View File

@@ -1,5 +1,3 @@
<resources> <resources>
<string name="title_activity_notif_slave">Keepass2Android</string>
</resources> </resources>

View File

@@ -42,15 +42,49 @@ namespace keepass2android
AlertDialog.Builder builder = new AlertDialog.Builder(activity); AlertDialog.Builder builder = new AlertDialog.Builder(activity);
View dlgContents = activity.LayoutInflater.Inflate(Resource.Layout.sftpcredentials, null); View dlgContents = activity.LayoutInflater.Inflate(Resource.Layout.sftpcredentials, null);
if (!defaultPath.EndsWith(_schemeSeparator)) var spinner = dlgContents.FindViewById<Spinner>(Resource.Id.sftp_auth_mode_spinner);
dlgContents.FindViewById<Button>(Resource.Id.send_public_key_button).Click += (sender, args) =>
{ {
var fileStorage = new Keepass2android.Javafilestorage.SftpStorage(); var fileStorage = new Keepass2android.Javafilestorage.SftpStorage(activity.ApplicationContext);
string pub_filename = fileStorage.CreateKeyPair();
Intent sendIntent = new Intent();
sendIntent.SetAction(Intent.ActionSend);
sendIntent.PutExtra(Intent.ExtraText, System.IO.File.ReadAllText(pub_filename));
sendIntent.PutExtra(Intent.ExtraSubject, "Keepass2Android sftp public key");
sendIntent.SetType("text/plain");
activity.StartActivity(Intent.CreateChooser(sendIntent, "Send public key to..."));
};
spinner.ItemSelected += (sender, args) =>
{
if (spinner.SelectedItemPosition == 0)
{
dlgContents.FindViewById<EditText>(Resource.Id.sftp_password).Visibility = ViewStates.Visible;
dlgContents.FindViewById<Button>(Resource.Id.send_public_key_button).Visibility = ViewStates.Gone;
}
else
{
dlgContents.FindViewById<EditText>(Resource.Id.sftp_password).Visibility = ViewStates.Gone;
dlgContents.FindViewById<Button>(Resource.Id.send_public_key_button).Visibility = ViewStates.Visible;
}
};
if (!defaultPath.EndsWith(_schemeSeparator))
{
var fileStorage = new Keepass2android.Javafilestorage.SftpStorage(activity.ApplicationContext);
SftpStorage.ConnectionInfo ci = fileStorage.SplitStringToConnectionInfo(defaultPath); SftpStorage.ConnectionInfo ci = fileStorage.SplitStringToConnectionInfo(defaultPath);
dlgContents.FindViewById<EditText>(Resource.Id.sftp_host).Text = ci.Host; dlgContents.FindViewById<EditText>(Resource.Id.sftp_host).Text = ci.Host;
dlgContents.FindViewById<EditText>(Resource.Id.sftp_port).Text = ci.Port.ToString(); dlgContents.FindViewById<EditText>(Resource.Id.sftp_port).Text = ci.Port.ToString();
dlgContents.FindViewById<EditText>(Resource.Id.sftp_user).Text = ci.Username; dlgContents.FindViewById<EditText>(Resource.Id.sftp_user).Text = ci.Username;
dlgContents.FindViewById<EditText>(Resource.Id.sftp_password).Text = ci.Password; dlgContents.FindViewById<EditText>(Resource.Id.sftp_password).Text = ci.Password;
dlgContents.FindViewById<EditText>(Resource.Id.sftp_initial_dir).Text = ci.LocalPath; dlgContents.FindViewById<EditText>(Resource.Id.sftp_initial_dir).Text = ci.LocalPath;
if (string.IsNullOrEmpty(ci.Password))
{
spinner.SetSelection(1);
}
} }
builder.SetView(dlgContents); builder.SetView(dlgContents);

View File

@@ -40,6 +40,26 @@
android:singleLine="true" android:singleLine="true"
android:hint="@string/hint_username" /> android:hint="@string/hint_username" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/auth_mode_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sftp_auth_mode" />
<Spinner
android:id="@+id/sftp_auth_mode_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="-4dp"
android:entries="@array/sftp_auth_modes" />
</LinearLayout>
<EditText <EditText
android:id="@+id/sftp_password" android:id="@+id/sftp_password"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@@ -48,6 +68,11 @@
android:singleLine="true" android:singleLine="true"
android:hint="@string/hint_pass" android:hint="@string/hint_pass"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
<Button android:id="@+id/send_public_key_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/send_public_key" />
<TextView android:id="@+id/initial_dir" <TextView android:id="@+id/initial_dir"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -510,6 +510,8 @@
<string name="hint_sftp_port">port</string> <string name="hint_sftp_port">port</string>
<string name="initial_directory">Initial directory (optional):</string> <string name="initial_directory">Initial directory (optional):</string>
<string name="enter_sftp_login_title">Enter SFTP login data:</string> <string name="enter_sftp_login_title">Enter SFTP login data:</string>
<string name="sftp_auth_mode">Authentication mode</string>
<string name="send_public_key">Send public key...</string>
<string name="enter_ftp_login_title">Enter FTP login data:</string> <string name="enter_ftp_login_title">Enter FTP login data:</string>
@@ -1108,6 +1110,10 @@ Initial public release
<item>Password + Challenge-Response secret (recovery mode)</item> <item>Password + Challenge-Response secret (recovery mode)</item>
<item>Password + Challenge-Response for Keepass XC</item> <item>Password + Challenge-Response for Keepass XC</item>
</string-array> </string-array>
<string-array name="sftp_auth_modes">
<item>Password</item>
<item>Private/Public key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options"> <string-array name="AcceptAllServerCertificates_options">
<item>Ignore certificate validation failures</item> <item>Ignore certificate validation failures</item>
<item>Warn when validation fails</item> <item>Warn when validation fails</item>

View File

@@ -586,7 +586,7 @@ namespace keepass2android
new DropboxAppFolderFileStorage(Application.Context, this), new DropboxAppFolderFileStorage(Application.Context, this),
new GoogleDriveFileStorage(Application.Context, this), new GoogleDriveFileStorage(Application.Context, this),
new OneDriveFileStorage(Application.Context, this), new OneDriveFileStorage(Application.Context, this),
new SftpFileStorage(this), new SftpFileStorage(Application.Context, this),
new NetFtpFileStorage(Application.Context, this), new NetFtpFileStorage(Application.Context, this),
new WebDavFileStorage(this), new WebDavFileStorage(this),
new PCloudFileStorage(Application.Context, this), new PCloudFileStorage(Application.Context, this),