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" />
</ItemGroup>
<ItemGroup>
<LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-release.aar">
<Link>Jars\JavaFileStorage-release.aar</Link>
<LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-debug.aar">
<Link>Jars\JavaFileStorage-debug.aar</Link>
</LibraryProjectZip>
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />

View File

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

View File

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

View File

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

View File

@@ -42,15 +42,49 @@ namespace keepass2android
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
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);
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_user).Text = ci.Username;
dlgContents.FindViewById<EditText>(Resource.Id.sftp_password).Text = ci.Password;
dlgContents.FindViewById<EditText>(Resource.Id.sftp_initial_dir).Text = ci.LocalPath;
if (string.IsNullOrEmpty(ci.Password))
{
spinner.SetSelection(1);
}
}
builder.SetView(dlgContents);

View File

@@ -40,6 +40,26 @@
android:singleLine="true"
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
android:id="@+id/sftp_password"
android:layout_width="fill_parent"
@@ -48,6 +68,11 @@
android:singleLine="true"
android:hint="@string/hint_pass"
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"
android:layout_width="wrap_content"

View File

@@ -510,6 +510,8 @@
<string name="hint_sftp_port">port</string>
<string name="initial_directory">Initial directory (optional):</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>
@@ -1108,6 +1110,10 @@ Initial public release
<item>Password + Challenge-Response secret (recovery mode)</item>
<item>Password + Challenge-Response for Keepass XC</item>
</string-array>
<string-array name="sftp_auth_modes">
<item>Password</item>
<item>Private/Public key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Ignore certificate validation failures</item>
<item>Warn when validation fails</item>

View File

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