From 1307b6a1b2cc86631c6c623a8a99e6adde3d98fa Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 25 Jun 2016 01:58:42 -0400 Subject: [PATCH] access group for keychain. load sites for given hostname in extension --- .../Services/KeyChainStorageService.cs | 5 ++- src/{iOS => iOS.Core}/Services/Settings.cs | 2 +- src/iOS.Core/iOS.Core.csproj | 14 +++++- src/iOS.Core/packages.config | 1 + src/iOS.Extension/ActionViewController.cs | 33 ++++++++------ src/iOS.Extension/Entitlements.plist | 4 ++ src/iOS.Extension/LoadingViewController.cs | 7 ++- src/iOS.Extension/Models/SiteViewModel.cs | 44 +++++++++++++++++++ src/iOS.Extension/iOS.Extension.csproj | 9 ++++ src/iOS.Extension/packages.config | 1 + src/iOS/Entitlements.plist | 4 ++ src/iOS/iOS.csproj | 2 - 12 files changed, 104 insertions(+), 22 deletions(-) rename src/{iOS => iOS.Core}/Services/KeyChainStorageService.cs (95%) rename src/{iOS => iOS.Core}/Services/Settings.cs (99%) create mode 100644 src/iOS.Extension/Models/SiteViewModel.cs diff --git a/src/iOS/Services/KeyChainStorageService.cs b/src/iOS.Core/Services/KeyChainStorageService.cs similarity index 95% rename from src/iOS/Services/KeyChainStorageService.cs rename to src/iOS.Core/Services/KeyChainStorageService.cs index 4cfda0869..4ccfe35d4 100644 --- a/src/iOS/Services/KeyChainStorageService.cs +++ b/src/iOS.Core/Services/KeyChainStorageService.cs @@ -4,7 +4,7 @@ using Bit.App.Abstractions; using Foundation; using Security; -namespace Bit.iOS.Services +namespace Bit.iOS.Core.Services { public class KeyChainStorageService : ISecureStorageService { @@ -67,7 +67,8 @@ namespace Bit.iOS.Services var record = new SecRecord(SecKind.GenericPassword) { Service = NSBundle.MainBundle.BundleIdentifier, - Account = key + Account = key, + AccessGroup = "TEAMID.bitwarden" }; if(data != null) diff --git a/src/iOS/Services/Settings.cs b/src/iOS.Core/Services/Settings.cs similarity index 99% rename from src/iOS/Services/Settings.cs rename to src/iOS.Core/Services/Settings.cs index 346ffc5b4..a08825723 100644 --- a/src/iOS/Services/Settings.cs +++ b/src/iOS.Core/Services/Settings.cs @@ -7,7 +7,7 @@ using MonoTouch.Foundation; #endif using Plugin.Settings.Abstractions; -namespace Bit.iOS.Services +namespace Bit.iOS.Core.Services { /// /// Main implementation for ISettings diff --git a/src/iOS.Core/iOS.Core.csproj b/src/iOS.Core/iOS.Core.csproj index cd1a82d61..026e0c001 100644 --- a/src/iOS.Core/iOS.Core.csproj +++ b/src/iOS.Core/iOS.Core.csproj @@ -33,6 +33,14 @@ false + + ..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.dll + True + + + ..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll + True + ..\..\packages\sqlite-net-pcl.1.1.1\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\SQLite-net.dll True @@ -48,10 +56,14 @@ + + - + + Designer + diff --git a/src/iOS.Core/packages.config b/src/iOS.Core/packages.config index bcdf89f57..c58d5883f 100644 --- a/src/iOS.Core/packages.config +++ b/src/iOS.Core/packages.config @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/src/iOS.Extension/ActionViewController.cs b/src/iOS.Extension/ActionViewController.cs index 242bc3660..f3bacaa49 100644 --- a/src/iOS.Extension/ActionViewController.cs +++ b/src/iOS.Extension/ActionViewController.cs @@ -2,20 +2,22 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Bit.App.Abstractions; using Bit.iOS.Core; using Bit.iOS.Extension.Models; using Foundation; using MobileCoreServices; using Newtonsoft.Json; using UIKit; +using Microsoft.Practices.Unity; +using XLabs.Ioc; namespace Bit.iOS.Extension { public partial class ActionViewController : UIViewController { public ActionViewController(IntPtr handle) : base(handle) - { - } + { } public Context Context { get; set; } @@ -27,17 +29,20 @@ namespace Bit.iOS.Extension base.ViewWillAppear(animated); } - public override void ViewDidLoad() + public async override void ViewDidLoad() { base.ViewDidLoad(); - List> sites = new List>(); - for(int i = 1; i <= 100; i++) - { - sites.Add(new Tuple("Site " + i, "Username " + i)); - } - - tableView.Source = new TableSource(sites, this); + Debug.WriteLine("BW LOG, Container"); + var siteService = Resolver.Resolve(); + Debug.WriteLine("BW LOG, siteService: " + siteService); + var sites = await siteService.GetAllAsync(); + Debug.WriteLine("BW LOG, sites: " + sites.Count()); + var siteModels = sites.Select(s => new SiteViewModel(s)); + Debug.WriteLine("BW LOG, siteModels: " + siteModels.Count()); + var filteredSiteModels = siteModels.Where(s => s.HostName == Context.Url?.Host); + Debug.WriteLine("BW LOG, filteredSiteModels: " + filteredSiteModels.Count()); + tableView.Source = new TableSource(filteredSiteModels, this); AutomaticallyAdjustsScrollViewInsets = false; } @@ -59,11 +64,11 @@ namespace Bit.iOS.Extension { private const string CellIdentifier = "TableCell"; - private IEnumerable> _tableItems; + private IEnumerable _tableItems; private Context _context; private ActionViewController _controller; - public TableSource(IEnumerable> items, ActionViewController controller) + public TableSource(IEnumerable items, ActionViewController controller) { _tableItems = items; _context = controller.Context; @@ -86,8 +91,8 @@ namespace Bit.iOS.Extension cell = new UITableViewCell(UITableViewCellStyle.Subtitle, CellIdentifier); } - cell.TextLabel.Text = item.Item1; - cell.DetailTextLabel.Text = item.Item2; + cell.TextLabel.Text = item.Name; + cell.DetailTextLabel.Text = item.Username; return cell; } diff --git a/src/iOS.Extension/Entitlements.plist b/src/iOS.Extension/Entitlements.plist index 6b75e3df4..78cc93a17 100644 --- a/src/iOS.Extension/Entitlements.plist +++ b/src/iOS.Extension/Entitlements.plist @@ -6,5 +6,9 @@ group.com.8bit.bitwarden + keychain-access-groups + + TEAMID.bitwarden + diff --git a/src/iOS.Extension/LoadingViewController.cs b/src/iOS.Extension/LoadingViewController.cs index 6512feabc..f7e760bed 100644 --- a/src/iOS.Extension/LoadingViewController.cs +++ b/src/iOS.Extension/LoadingViewController.cs @@ -14,6 +14,7 @@ using Bit.iOS.Core; using Newtonsoft.Json; using Bit.iOS.Extension.Models; using MobileCoreServices; +using Plugin.Settings.Abstractions; namespace Bit.iOS.Extension { @@ -87,7 +88,7 @@ namespace Bit.iOS.Extension // Services .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new ContainerControlledLifetimeManager()) - //.RegisterType(new ContainerControlledLifetimeManager()) + .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new ContainerControlledLifetimeManager()) @@ -101,11 +102,13 @@ namespace Bit.iOS.Extension .RegisterType(new ContainerControlledLifetimeManager()) .RegisterType(new ContainerControlledLifetimeManager()); // Other - //.RegisterInstance(CrossSettings.Current, new ContainerControlledLifetimeManager()) //.RegisterInstance(CrossConnectivity.Current, new ContainerControlledLifetimeManager()) //.RegisterInstance(UserDialogs.Instance, new ContainerControlledLifetimeManager()) //.RegisterInstance(CrossFingerprint.Current, new ContainerControlledLifetimeManager()); + ISettings settings = new Settings("group.com.8bit.bitwarden"); + container.RegisterInstance(settings, new ContainerControlledLifetimeManager()); + Resolver.SetResolver(new UnityResolver(container)); } diff --git a/src/iOS.Extension/Models/SiteViewModel.cs b/src/iOS.Extension/Models/SiteViewModel.cs new file mode 100644 index 000000000..d2bc0a731 --- /dev/null +++ b/src/iOS.Extension/Models/SiteViewModel.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Bit.App.Models; + +namespace Bit.iOS.Extension.Models +{ + public class SiteViewModel + { + public SiteViewModel(Site site) + { + Id = site.Id; + Name = site.Name?.Decrypt(); + Username = site.Username?.Decrypt(); + Password = site.Password?.Decrypt(); + Uri = site.Uri?.Decrypt(); + } + + public string Id { get; set; } + public string Name { get; set; } + public string Username { get; set; } + public string Password { get; set; } + public string Uri { get; set; } + public string HostName + { + get + { + if(string.IsNullOrWhiteSpace(Uri)) + { + return null; + } + + try + { + return new Uri(Uri)?.Host; + } + catch + { + return null; + }; + } + } + } +} diff --git a/src/iOS.Extension/iOS.Extension.csproj b/src/iOS.Extension/iOS.Extension.csproj index 392035b03..320aa6e78 100644 --- a/src/iOS.Extension/iOS.Extension.csproj +++ b/src/iOS.Extension/iOS.Extension.csproj @@ -111,6 +111,7 @@ + @@ -118,6 +119,14 @@ + + ..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.dll + True + + + ..\..\packages\Xam.Plugins.Settings.2.1.0\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll + True + diff --git a/src/iOS.Extension/packages.config b/src/iOS.Extension/packages.config index 9a37a8117..4cb7a7c74 100644 --- a/src/iOS.Extension/packages.config +++ b/src/iOS.Extension/packages.config @@ -5,6 +5,7 @@ + \ No newline at end of file diff --git a/src/iOS/Entitlements.plist b/src/iOS/Entitlements.plist index 6b75e3df4..78cc93a17 100644 --- a/src/iOS/Entitlements.plist +++ b/src/iOS/Entitlements.plist @@ -6,5 +6,9 @@ group.com.8bit.bitwarden + keychain-access-groups + + TEAMID.bitwarden + diff --git a/src/iOS/iOS.csproj b/src/iOS/iOS.csproj index ba1d8d457..2a32a24ab 100644 --- a/src/iOS/iOS.csproj +++ b/src/iOS/iOS.csproj @@ -110,10 +110,8 @@ - -