This repository has been archived by the owner on Oct 6, 2023. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 0fafaae
Showing
137 changed files
with
6,554 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?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>com.apple.developer.authentication-services.autofill-credential-provider</key> | ||
<true/> | ||
<key>com.apple.security.application-groups</key> | ||
<array> | ||
<string>group.OpenSesame.ethanlipnik</string> | ||
</array> | ||
<key>keychain-access-groups</key> | ||
<array> | ||
<string>$(AppIdentifierPrefix)OpenSesame</string> | ||
<string>$(AppIdentifierPrefix)com.ethanlipnik.OpenSesame</string> | ||
</array> | ||
</dict> | ||
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19158" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Xki-Si-B7m"> | ||
<device id="retina4_7" orientation="portrait" appearance="light"/> | ||
<dependencies> | ||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19141"/> | ||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
<capability name="System colors in document resources" minToolsVersion="11.0"/> | ||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
</dependencies> | ||
<scenes> | ||
<!--Credential Provider View Controller--> | ||
<scene sceneID="Uma-9u-xWV"> | ||
<objects> | ||
<viewController id="Xki-Si-B7m" customClass="CredentialProviderViewController" customModule="AutoFill_iOS" customModuleProvider="target" sceneMemberID="viewController"> | ||
<view key="view" contentMode="scaleToFill" id="BuU-Ak-iZz"> | ||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
<subviews> | ||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="insetGrouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="1bA-AU-EX3"> | ||
<rect key="frame" x="0.0" y="44" width="375" height="623"/> | ||
<prototypes> | ||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="cell" textLabel="rO2-ll-Zkn" detailTextLabel="QA8-Sd-jfk" style="IBUITableViewCellStyleSubtitle" id="BI2-kO-Thi"> | ||
<rect key="frame" x="16" y="49.5" width="343" height="53.5"/> | ||
<autoresizingMask key="autoresizingMask"/> | ||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="BI2-kO-Thi" id="iGP-w8-BVV"> | ||
<rect key="frame" x="0.0" y="0.0" width="343" height="53.5"/> | ||
<autoresizingMask key="autoresizingMask"/> | ||
<subviews> | ||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Website" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" id="rO2-ll-Zkn"> | ||
<rect key="frame" x="16" y="7.5" width="55" height="17"/> | ||
<autoresizingMask key="autoresizingMask"/> | ||
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/> | ||
<nil key="textColor"/> | ||
<nil key="highlightedColor"/> | ||
</label> | ||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Username or Email" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" id="QA8-Sd-jfk"> | ||
<rect key="frame" x="16" y="27" width="121.5" height="17"/> | ||
<autoresizingMask key="autoresizingMask"/> | ||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/> | ||
<color key="textColor" systemColor="secondaryLabelColor"/> | ||
<nil key="highlightedColor"/> | ||
</label> | ||
</subviews> | ||
</tableViewCellContentView> | ||
</tableViewCell> | ||
</prototypes> | ||
</tableView> | ||
<navigationBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tm6-qG-uHm"> | ||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/> | ||
<items> | ||
<navigationItem title="OpenSesame" id="HfY-ib-6qt"> | ||
<barButtonItem key="leftBarButtonItem" systemItem="cancel" id="bEZ-MG-jDy"> | ||
<connections> | ||
<action selector="cancel:" destination="Xki-Si-B7m" id="6ap-3Q-iEX"/> | ||
</connections> | ||
</barButtonItem> | ||
</navigationItem> | ||
</items> | ||
</navigationBar> | ||
</subviews> | ||
<viewLayoutGuide key="safeArea" id="Ky8-vK-JVj"/> | ||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
<constraints> | ||
<constraint firstItem="1bA-AU-EX3" firstAttribute="leading" secondItem="Ky8-vK-JVj" secondAttribute="leading" id="Jcc-6j-eF7"/> | ||
<constraint firstItem="tm6-qG-uHm" firstAttribute="leading" secondItem="Ky8-vK-JVj" secondAttribute="leading" id="Oyi-gA-lN0"/> | ||
<constraint firstItem="tm6-qG-uHm" firstAttribute="top" secondItem="Ky8-vK-JVj" secondAttribute="top" id="P51-c8-dkn"/> | ||
<constraint firstItem="1bA-AU-EX3" firstAttribute="trailing" secondItem="Ky8-vK-JVj" secondAttribute="trailing" id="auJ-ET-46P"/> | ||
<constraint firstItem="1bA-AU-EX3" firstAttribute="bottom" secondItem="Ky8-vK-JVj" secondAttribute="bottom" id="nLw-td-12b"/> | ||
<constraint firstItem="tm6-qG-uHm" firstAttribute="trailing" secondItem="Ky8-vK-JVj" secondAttribute="trailing" id="rDd-9x-EO6"/> | ||
<constraint firstItem="1bA-AU-EX3" firstAttribute="top" secondItem="tm6-qG-uHm" secondAttribute="bottom" id="scf-gN-CkY"/> | ||
</constraints> | ||
</view> | ||
<connections> | ||
<outlet property="tableView" destination="1bA-AU-EX3" id="Um5-Hd-nAk"/> | ||
</connections> | ||
</viewController> | ||
<placeholder placeholderIdentifier="IBFirstResponder" id="RwB-HB-TSk" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
</objects> | ||
<point key="canvasLocation" x="928.79999999999995" y="97.601199400299862"/> | ||
</scene> | ||
</scenes> | ||
<resources> | ||
<systemColor name="secondaryLabelColor"> | ||
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> | ||
</systemColor> | ||
<systemColor name="systemBackgroundColor"> | ||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
</systemColor> | ||
</resources> | ||
</document> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
// | ||
// CredentialProviderViewController.swift | ||
// AutoFill iOS | ||
// | ||
// Created by Ethan Lipnik on 8/18/21. | ||
// | ||
|
||
import AuthenticationServices | ||
import DomainParser | ||
import KeychainAccess | ||
|
||
class CredentialProviderViewController: ASCredentialProviderViewController { | ||
@IBOutlet weak var tableView: UITableView! | ||
|
||
let viewContext = PersistenceController.shared.container.viewContext | ||
var accounts: [Account] = [] | ||
var allAccounts: [Account] = [] | ||
|
||
/* | ||
Implement this method if your extension supports showing credentials in the QuickType bar. | ||
When the user selects a credential from your app, this method will be called with the | ||
ASPasswordCredentialIdentity your app has previously saved to the ASCredentialIdentityStore. | ||
Provide the password by completing the extension request with the associated ASPasswordCredential. | ||
If using the credential would require showing custom UI for authenticating the user, cancel | ||
the request with error code ASExtensionError.userInteractionRequired. | ||
override func provideCredentialWithoutUserInteraction(for credentialIdentity: ASPasswordCredentialIdentity) { | ||
let databaseIsUnlocked = true | ||
if (databaseIsUnlocked) { | ||
let passwordCredential = ASPasswordCredential(user: "j_appleseed", password: "apple1234") | ||
self.extensionContext.completeRequest(withSelectedCredential: passwordCredential, completionHandler: nil) | ||
} else { | ||
self.extensionContext.cancelRequest(withError: NSError(domain: ASExtensionErrorDomain, code:ASExtensionError.userInteractionRequired.rawValue)) | ||
} | ||
} | ||
*/ | ||
|
||
/* | ||
Implement this method if provideCredentialWithoutUserInteraction(for:) can fail with | ||
ASExtensionError.userInteractionRequired. In this case, the system may present your extension's | ||
UI and call this method. Show appropriate UI for authenticating the user then provide the password | ||
by completing the extension request with the associated ASPasswordCredential. | ||
override func prepareInterfaceToProvideCredential(for credentialIdentity: ASPasswordCredentialIdentity) { | ||
} | ||
*/ | ||
|
||
override func prepareInterfaceToProvideCredential(for credentialIdentity: ASPasswordCredentialIdentity) { | ||
|
||
} | ||
|
||
@IBAction func cancel(_ sender: AnyObject?) { | ||
self.extensionContext.cancelRequest(withError: NSError(domain: ASExtensionErrorDomain, code: ASExtensionError.userCanceled.rawValue)) | ||
} | ||
} | ||
|
||
extension CredentialProviderViewController: UITableViewDelegate, UITableViewDataSource { | ||
|
||
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { | ||
return section == 0 ? nil : "All Accounts" | ||
} | ||
|
||
func numberOfSections(in tableView: UITableView) -> Int { | ||
return accounts.isEmpty ? 1 : 2 | ||
} | ||
|
||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
if section == 0 && !accounts.isEmpty { | ||
return accounts.count | ||
} else { | ||
return allAccounts.count | ||
} | ||
} | ||
|
||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
var account: Account! | ||
if indexPath.section == 0 && !accounts.isEmpty { | ||
account = accounts[indexPath.item] | ||
} else { | ||
account = allAccounts[indexPath.item] | ||
} | ||
|
||
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) | ||
|
||
cell.textLabel?.text = account.domain | ||
cell.detailTextLabel?.text = account.username | ||
|
||
return cell | ||
} | ||
|
||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | ||
var account: Account! | ||
if indexPath.section == 0 && !accounts.isEmpty { | ||
account = accounts[indexPath.item] | ||
} else { | ||
account = allAccounts[indexPath.item] | ||
} | ||
|
||
do { | ||
let decryptedAccount = try decryptedAccount(account) | ||
let passwordCredential = ASPasswordCredential(user: decryptedAccount.username, password: decryptedAccount.password) | ||
self.extensionContext.completeRequest(withSelectedCredential: passwordCredential, completionHandler: nil) | ||
} catch { | ||
self.extensionContext.cancelRequest(withError: error) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?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>NSExtension</key> | ||
<dict> | ||
<key>NSExtensionMainStoryboard</key> | ||
<string>MainInterface</string> | ||
<key>NSExtensionPointIdentifier</key> | ||
<string>com.apple.authentication-services-credential-provider-ui</string> | ||
</dict> | ||
</dict> | ||
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?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>com.apple.developer.authentication-services.autofill-credential-provider</key> | ||
<true/> | ||
<key>com.apple.security.application-groups</key> | ||
<array> | ||
<string>group.OpenSesame.ethanlipnik</string> | ||
</array> | ||
<key>keychain-access-groups</key> | ||
<array> | ||
<string>$(AppIdentifierPrefix)com.ethanlipnik.OpenSesame</string> | ||
<string>$(AppIdentifierPrefix)OpenSesame</string> | ||
</array> | ||
</dict> | ||
</plist> |
69 changes: 69 additions & 0 deletions
69
AutoFill macOS/Base.lproj/CredentialProviderViewController.xib
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17021" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> | ||
<dependencies> | ||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17021"/> | ||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
</dependencies> | ||
<objects> | ||
<customObject id="-2" userLabel="File's Owner" customClass="CredentialProviderViewController" customModuleProvider="target"> | ||
<connections> | ||
<outlet property="view" destination="1" id="2"/> | ||
</connections> | ||
</customObject> | ||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> | ||
<customObject id="-3" userLabel="Application" customClass="NSObject"/> | ||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1"> | ||
<rect key="frame" x="0.0" y="0.0" width="378" height="94"/> | ||
<subviews> | ||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1uM-r7-H1c"> | ||
<rect key="frame" x="177" y="3" width="197" height="32"/> | ||
<buttonCell key="cell" type="push" title="Return Example Password" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="2l4-PO-we5"> | ||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> | ||
<font key="font" metaFont="system"/> | ||
<string key="keyEquivalent">D</string> | ||
<modifierMask key="keyEquivalentModifierMask" command="YES"/> | ||
</buttonCell> | ||
<connections> | ||
<action selector="passwordSelected:" target="-2" id="yic-EC-GGk"/> | ||
</connections> | ||
</button> | ||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NVE-vN-dkz"> | ||
<rect key="frame" x="99" y="3" width="82" height="32"/> | ||
<constraints> | ||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="60" id="cP1-hK-9ZX"/> | ||
</constraints> | ||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6Up-t3-mwm"> | ||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> | ||
<font key="font" metaFont="system"/> | ||
<string key="keyEquivalent" base64-UTF8="YES"> | ||
Gw | ||
</string> | ||
</buttonCell> | ||
<connections> | ||
<action selector="cancel:" target="-2" id="Qav-AK-DGt"/> | ||
</connections> | ||
</button> | ||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aNc-0i-CWK"> | ||
<rect key="frame" x="135" y="63" width="108" height="16"/> | ||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="AutoFill macOS" id="0xp-rC-2gr"> | ||
<font key="font" metaFont="systemBold"/> | ||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> | ||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> | ||
</textFieldCell> | ||
</textField> | ||
</subviews> | ||
<constraints> | ||
<constraint firstItem="1uM-r7-H1c" firstAttribute="leading" secondItem="NVE-vN-dkz" secondAttribute="trailing" constant="8" id="1UO-J1-LbJ"/> | ||
<constraint firstItem="NVE-vN-dkz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="3N9-qo-UfS"/> | ||
<constraint firstAttribute="bottom" secondItem="1uM-r7-H1c" secondAttribute="bottom" constant="10" id="4wH-De-nMF"/> | ||
<constraint firstItem="NVE-vN-dkz" firstAttribute="firstBaseline" secondItem="aNc-0i-CWK" secondAttribute="baseline" constant="50" id="Dpq-cK-cPE"/> | ||
<constraint firstAttribute="bottom" secondItem="NVE-vN-dkz" secondAttribute="bottom" constant="10" id="USG-Gg-of3"/> | ||
<constraint firstItem="1uM-r7-H1c" firstAttribute="leading" secondItem="NVE-vN-dkz" secondAttribute="trailing" constant="8" id="a8N-vS-Ew9"/> | ||
<constraint firstAttribute="trailing" secondItem="1uM-r7-H1c" secondAttribute="trailing" constant="10" id="qfT-cw-QQ2"/> | ||
<constraint firstAttribute="centerX" secondItem="aNc-0i-CWK" secondAttribute="centerX" id="uV3-Wn-RA3"/> | ||
<constraint firstItem="aNc-0i-CWK" firstAttribute="top" secondItem="1" secondAttribute="top" constant="15" id="vpR-tf-ebx"/> | ||
</constraints> | ||
<point key="canvasLocation" x="162" y="146"/> | ||
</customView> | ||
</objects> | ||
</document> |
Oops, something went wrong.