├── .gitignore ├── .gitmodules ├── Authenticator.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── LICENSE ├── Shared (App) ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── ios-marketing-icon-1024@1x.png │ │ ├── ipad-icon-20@1x.png │ │ ├── ipad-icon-20@2x.png │ │ ├── ipad-icon-29@1x.png │ │ ├── ipad-icon-29@2x.png │ │ ├── ipad-icon-40@1x.png │ │ ├── ipad-icon-40@2x.png │ │ ├── ipad-icon-76@1x.png │ │ ├── ipad-icon-76@2x.png │ │ ├── ipad-icon-83.5@2x.png │ │ ├── iphone-icon-20@2x.png │ │ ├── iphone-icon-20@3x.png │ │ ├── iphone-icon-29@2x.png │ │ ├── iphone-icon-29@3x.png │ │ ├── iphone-icon-40@2x.png │ │ ├── iphone-icon-40@3x.png │ │ ├── iphone-icon-60@2x.png │ │ ├── iphone-icon-60@3x.png │ │ ├── mac-icon-128@1x.png │ │ ├── mac-icon-128@2x.png │ │ ├── mac-icon-16@1x.png │ │ ├── mac-icon-16@2x.png │ │ ├── mac-icon-256@1x.png │ │ ├── mac-icon-256@2x.png │ │ ├── mac-icon-32@1x.png │ │ ├── mac-icon-32@2x.png │ │ ├── mac-icon-512@1x.png │ │ └── mac-icon-512@2x.png │ ├── Contents.json │ └── LargeIcon.imageset │ │ ├── Contents.json │ │ └── icon128.png ├── Base.lproj │ └── Main.html ├── Resources │ ├── Icon.png │ ├── Script.js │ └── Style.css └── ViewController.swift ├── Shared (Extension) └── SafariWebExtensionHandler.swift ├── macOS (App) ├── AppDelegate.swift ├── Authenticator.entitlements ├── Base.lproj │ └── Main.storyboard └── Info.plist ├── macOS (Extension) ├── Authenticator.entitlements └── Info.plist └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | ## Playgrounds 34 | timeline.xctimeline 35 | playground.xcworkspace 36 | 37 | # Swift Package Manager 38 | # 39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 40 | # Packages/ 41 | # Package.pins 42 | # Package.resolved 43 | # *.xcodeproj 44 | # 45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 46 | # hence it is not needed unless you have added a package configuration file to your project 47 | # .swiftpm 48 | 49 | .build/ 50 | 51 | # CocoaPods 52 | # 53 | # We recommend against adding the Pods directory to your .gitignore. However 54 | # you should judge for yourself, the pros and cons are mentioned at: 55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 56 | # 57 | # Pods/ 58 | # 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # 64 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 65 | # Carthage/Checkouts 66 | 67 | Carthage/Build/ 68 | 69 | # Accio dependency management 70 | Dependencies/ 71 | .accio/ 72 | 73 | # fastlane 74 | # 75 | # It is recommended to not store the screenshots in the git repo. 76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 77 | # For more information about the recommended setup visit: 78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 79 | 80 | fastlane/report.xml 81 | fastlane/Preview.html 82 | fastlane/screenshots/**/*.png 83 | fastlane/test_output 84 | 85 | # Code Injection 86 | # 87 | # After new code Injection tools there's a generated folder /iOSInjectionProject 88 | # https://github.com/johnno1962/injectionforxcode 89 | 90 | iOSInjectionProject/ 91 | 92 | .DS_Store -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "authenticator"] 2 | path = authenticator 3 | url = https://github.com/Authenticator-Extension/authenticator 4 | -------------------------------------------------------------------------------- /Authenticator.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 55; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6FAFAD3E277FCD590041F854 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFAD3D277FCD590041F854 /* AppDelegate.swift */; }; 11 | 6FAFAD41277FCD590041F854 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD3F277FCD590041F854 /* Main.storyboard */; }; 12 | 6FAFAD53277FCD590041F854 /* Authenticator Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6FAFAD52277FCD590041F854 /* Authenticator Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 13 | 6FAFAD5A277FCD590041F854 /* Main.html in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD1C277FCD550041F854 /* Main.html */; }; 14 | 6FAFAD5C277FCD590041F854 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD1E277FCD550041F854 /* Icon.png */; }; 15 | 6FAFAD5E277FCD590041F854 /* Style.css in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD1F277FCD550041F854 /* Style.css */; }; 16 | 6FAFAD60277FCD590041F854 /* Script.js in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD20277FCD550041F854 /* Script.js */; }; 17 | 6FAFAD62277FCD590041F854 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFAD21277FCD550041F854 /* ViewController.swift */; }; 18 | 6FAFAD64277FCD590041F854 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD22277FCD590041F854 /* Assets.xcassets */; }; 19 | 6FAFAD66277FCD590041F854 /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFAD24277FCD590041F854 /* SafariWebExtensionHandler.swift */; }; 20 | 6FAFAD81277FCD5B0041F854 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD78277FCD5B0041F854 /* LICENSE */; }; 21 | 6FAFAD82277FCD5B0041F854 /* css in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD79277FCD5B0041F854 /* css */; }; 22 | 6FAFAD83277FCD5B0041F854 /* dist in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7A277FCD5B0041F854 /* dist */; }; 23 | 6FAFAD84277FCD5B0041F854 /* images in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7B277FCD5B0041F854 /* images */; }; 24 | 6FAFAD85277FCD5B0041F854 /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7C277FCD5B0041F854 /* manifest.json */; }; 25 | 6FAFAD86277FCD5B0041F854 /* view in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7D277FCD5B0041F854 /* view */; }; 26 | 6FAFAD87277FCD5B0041F854 /* schema.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7E277FCD5B0041F854 /* schema.json */; }; 27 | 6FAFAD88277FCD5B0041F854 /* _locales in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD7F277FCD5B0041F854 /* _locales */; }; 28 | 6FAFAD89277FCD5B0041F854 /* manifest-pwa.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FAFAD80277FCD5B0041F854 /* manifest-pwa.json */; }; 29 | /* End PBXBuildFile section */ 30 | 31 | /* Begin PBXContainerItemProxy section */ 32 | 6FAFAD54277FCD590041F854 /* PBXContainerItemProxy */ = { 33 | isa = PBXContainerItemProxy; 34 | containerPortal = 6FAFAD16277FCD540041F854 /* Project object */; 35 | proxyType = 1; 36 | remoteGlobalIDString = 6FAFAD51277FCD590041F854; 37 | remoteInfo = "Authenticator Extension (macOS)"; 38 | }; 39 | /* End PBXContainerItemProxy section */ 40 | 41 | /* Begin PBXCopyFilesBuildPhase section */ 42 | 6FAFAD73277FCD590041F854 /* Embed App Extensions */ = { 43 | isa = PBXCopyFilesBuildPhase; 44 | buildActionMask = 2147483647; 45 | dstPath = ""; 46 | dstSubfolderSpec = 13; 47 | files = ( 48 | 6FAFAD53277FCD590041F854 /* Authenticator Extension.appex in Embed App Extensions */, 49 | ); 50 | name = "Embed App Extensions"; 51 | runOnlyForDeploymentPostprocessing = 0; 52 | }; 53 | /* End PBXCopyFilesBuildPhase section */ 54 | 55 | /* Begin PBXFileReference section */ 56 | 6FAFAD1D277FCD550041F854 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = Base; path = ../Base.lproj/Main.html; sourceTree = ""; }; 57 | 6FAFAD1E277FCD550041F854 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; 58 | 6FAFAD1F277FCD550041F854 /* Style.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = Style.css; sourceTree = ""; }; 59 | 6FAFAD20277FCD550041F854 /* Script.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = Script.js; sourceTree = ""; }; 60 | 6FAFAD21277FCD550041F854 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 61 | 6FAFAD22277FCD590041F854 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 62 | 6FAFAD24277FCD590041F854 /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; 63 | 6FAFAD3B277FCD590041F854 /* Authenticator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Authenticator.app; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 6FAFAD3D277FCD590041F854 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 65 | 6FAFAD40277FCD590041F854 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 66 | 6FAFAD42277FCD590041F854 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 67 | 6FAFAD43277FCD590041F854 /* Authenticator.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Authenticator.entitlements; sourceTree = ""; }; 68 | 6FAFAD52277FCD590041F854 /* Authenticator Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Authenticator Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 69 | 6FAFAD57277FCD590041F854 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 70 | 6FAFAD58277FCD590041F854 /* Authenticator.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Authenticator.entitlements; sourceTree = ""; }; 71 | 6FAFAD78277FCD5B0041F854 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = ./Authenticator/test/chrome/LICENSE; sourceTree = ""; }; 72 | 6FAFAD79277FCD5B0041F854 /* css */ = {isa = PBXFileReference; lastKnownFileType = folder; name = css; path = ./Authenticator/test/chrome/css; sourceTree = ""; }; 73 | 6FAFAD7A277FCD5B0041F854 /* dist */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dist; path = ./Authenticator/test/chrome/dist; sourceTree = ""; }; 74 | 6FAFAD7B277FCD5B0041F854 /* images */ = {isa = PBXFileReference; lastKnownFileType = folder; name = images; path = ./Authenticator/test/chrome/images; sourceTree = ""; }; 75 | 6FAFAD7C277FCD5B0041F854 /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = manifest.json; path = ./Authenticator/test/chrome/manifest.json; sourceTree = ""; }; 76 | 6FAFAD7D277FCD5B0041F854 /* view */ = {isa = PBXFileReference; lastKnownFileType = folder; name = view; path = ./Authenticator/test/chrome/view; sourceTree = ""; }; 77 | 6FAFAD7E277FCD5B0041F854 /* schema.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = schema.json; path = ./Authenticator/test/chrome/schema.json; sourceTree = ""; }; 78 | 6FAFAD7F277FCD5B0041F854 /* _locales */ = {isa = PBXFileReference; lastKnownFileType = folder; name = _locales; path = ./Authenticator/test/chrome/_locales; sourceTree = ""; }; 79 | 6FAFAD80277FCD5B0041F854 /* manifest-pwa.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "manifest-pwa.json"; path = "./Authenticator/test/chrome/manifest-pwa.json"; sourceTree = ""; }; 80 | /* End PBXFileReference section */ 81 | 82 | /* Begin PBXFrameworksBuildPhase section */ 83 | 6FAFAD38277FCD590041F854 /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | 6FAFAD4F277FCD590041F854 /* Frameworks */ = { 91 | isa = PBXFrameworksBuildPhase; 92 | buildActionMask = 2147483647; 93 | files = ( 94 | ); 95 | runOnlyForDeploymentPostprocessing = 0; 96 | }; 97 | /* End PBXFrameworksBuildPhase section */ 98 | 99 | /* Begin PBXGroup section */ 100 | 6FAFAD15277FCD540041F854 = { 101 | isa = PBXGroup; 102 | children = ( 103 | 6FAFAD1A277FCD550041F854 /* Shared (App) */, 104 | 6FAFAD23277FCD590041F854 /* Shared (Extension) */, 105 | 6FAFAD3C277FCD590041F854 /* macOS (App) */, 106 | 6FAFAD56277FCD590041F854 /* macOS (Extension) */, 107 | 6FAFAD2A277FCD590041F854 /* Products */, 108 | ); 109 | sourceTree = ""; 110 | }; 111 | 6FAFAD1A277FCD550041F854 /* Shared (App) */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 6FAFAD21277FCD550041F854 /* ViewController.swift */, 115 | 6FAFAD22277FCD590041F854 /* Assets.xcassets */, 116 | 6FAFAD1B277FCD550041F854 /* Resources */, 117 | ); 118 | path = "Shared (App)"; 119 | sourceTree = ""; 120 | }; 121 | 6FAFAD1B277FCD550041F854 /* Resources */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 6FAFAD1C277FCD550041F854 /* Main.html */, 125 | 6FAFAD1E277FCD550041F854 /* Icon.png */, 126 | 6FAFAD1F277FCD550041F854 /* Style.css */, 127 | 6FAFAD20277FCD550041F854 /* Script.js */, 128 | ); 129 | path = Resources; 130 | sourceTree = ""; 131 | }; 132 | 6FAFAD23277FCD590041F854 /* Shared (Extension) */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 6FAFAD77277FCD5B0041F854 /* Resources */, 136 | 6FAFAD24277FCD590041F854 /* SafariWebExtensionHandler.swift */, 137 | ); 138 | path = "Shared (Extension)"; 139 | sourceTree = ""; 140 | }; 141 | 6FAFAD2A277FCD590041F854 /* Products */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 6FAFAD3B277FCD590041F854 /* Authenticator.app */, 145 | 6FAFAD52277FCD590041F854 /* Authenticator Extension.appex */, 146 | ); 147 | name = Products; 148 | sourceTree = ""; 149 | }; 150 | 6FAFAD3C277FCD590041F854 /* macOS (App) */ = { 151 | isa = PBXGroup; 152 | children = ( 153 | 6FAFAD3D277FCD590041F854 /* AppDelegate.swift */, 154 | 6FAFAD3F277FCD590041F854 /* Main.storyboard */, 155 | 6FAFAD42277FCD590041F854 /* Info.plist */, 156 | 6FAFAD43277FCD590041F854 /* Authenticator.entitlements */, 157 | ); 158 | path = "macOS (App)"; 159 | sourceTree = ""; 160 | }; 161 | 6FAFAD56277FCD590041F854 /* macOS (Extension) */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | 6FAFAD57277FCD590041F854 /* Info.plist */, 165 | 6FAFAD58277FCD590041F854 /* Authenticator.entitlements */, 166 | ); 167 | path = "macOS (Extension)"; 168 | sourceTree = ""; 169 | }; 170 | 6FAFAD77277FCD5B0041F854 /* Resources */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 6FAFAD78277FCD5B0041F854 /* LICENSE */, 174 | 6FAFAD79277FCD5B0041F854 /* css */, 175 | 6FAFAD7A277FCD5B0041F854 /* dist */, 176 | 6FAFAD7B277FCD5B0041F854 /* images */, 177 | 6FAFAD7C277FCD5B0041F854 /* manifest.json */, 178 | 6FAFAD7D277FCD5B0041F854 /* view */, 179 | 6FAFAD7E277FCD5B0041F854 /* schema.json */, 180 | 6FAFAD7F277FCD5B0041F854 /* _locales */, 181 | 6FAFAD80277FCD5B0041F854 /* manifest-pwa.json */, 182 | ); 183 | name = Resources; 184 | path = "Shared (Extension)"; 185 | sourceTree = SOURCE_ROOT; 186 | }; 187 | /* End PBXGroup section */ 188 | 189 | /* Begin PBXNativeTarget section */ 190 | 6FAFAD3A277FCD590041F854 /* Authenticator (macOS) */ = { 191 | isa = PBXNativeTarget; 192 | buildConfigurationList = 6FAFAD74277FCD590041F854 /* Build configuration list for PBXNativeTarget "Authenticator (macOS)" */; 193 | buildPhases = ( 194 | 6FAFAD37277FCD590041F854 /* Sources */, 195 | 6FAFAD38277FCD590041F854 /* Frameworks */, 196 | 6FAFAD39277FCD590041F854 /* Resources */, 197 | 6FAFAD73277FCD590041F854 /* Embed App Extensions */, 198 | ); 199 | buildRules = ( 200 | ); 201 | dependencies = ( 202 | 6FAFAD55277FCD590041F854 /* PBXTargetDependency */, 203 | ); 204 | name = "Authenticator (macOS)"; 205 | productName = "Authenticator (macOS)"; 206 | productReference = 6FAFAD3B277FCD590041F854 /* Authenticator.app */; 207 | productType = "com.apple.product-type.application"; 208 | }; 209 | 6FAFAD51277FCD590041F854 /* Authenticator Extension (macOS) */ = { 210 | isa = PBXNativeTarget; 211 | buildConfigurationList = 6FAFAD70277FCD590041F854 /* Build configuration list for PBXNativeTarget "Authenticator Extension (macOS)" */; 212 | buildPhases = ( 213 | 6FAFAD4E277FCD590041F854 /* Sources */, 214 | 6FAFAD4F277FCD590041F854 /* Frameworks */, 215 | 6FAFAD50277FCD590041F854 /* Resources */, 216 | ); 217 | buildRules = ( 218 | ); 219 | dependencies = ( 220 | ); 221 | name = "Authenticator Extension (macOS)"; 222 | productName = "Authenticator Extension (macOS)"; 223 | productReference = 6FAFAD52277FCD590041F854 /* Authenticator Extension.appex */; 224 | productType = "com.apple.product-type.app-extension"; 225 | }; 226 | /* End PBXNativeTarget section */ 227 | 228 | /* Begin PBXProject section */ 229 | 6FAFAD16277FCD540041F854 /* Project object */ = { 230 | isa = PBXProject; 231 | attributes = { 232 | BuildIndependentTargetsInParallel = 1; 233 | LastSwiftUpdateCheck = 1320; 234 | LastUpgradeCheck = 1320; 235 | TargetAttributes = { 236 | 6FAFAD3A277FCD590041F854 = { 237 | CreatedOnToolsVersion = 13.2.1; 238 | }; 239 | 6FAFAD51277FCD590041F854 = { 240 | CreatedOnToolsVersion = 13.2.1; 241 | }; 242 | }; 243 | }; 244 | buildConfigurationList = 6FAFAD19277FCD540041F854 /* Build configuration list for PBXProject "Authenticator" */; 245 | compatibilityVersion = "Xcode 13.0"; 246 | developmentRegion = en; 247 | hasScannedForEncodings = 0; 248 | knownRegions = ( 249 | en, 250 | Base, 251 | ); 252 | mainGroup = 6FAFAD15277FCD540041F854; 253 | productRefGroup = 6FAFAD2A277FCD590041F854 /* Products */; 254 | projectDirPath = ""; 255 | projectRoot = ""; 256 | targets = ( 257 | 6FAFAD3A277FCD590041F854 /* Authenticator (macOS) */, 258 | 6FAFAD51277FCD590041F854 /* Authenticator Extension (macOS) */, 259 | ); 260 | }; 261 | /* End PBXProject section */ 262 | 263 | /* Begin PBXResourcesBuildPhase section */ 264 | 6FAFAD39277FCD590041F854 /* Resources */ = { 265 | isa = PBXResourcesBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | 6FAFAD5C277FCD590041F854 /* Icon.png in Resources */, 269 | 6FAFAD5E277FCD590041F854 /* Style.css in Resources */, 270 | 6FAFAD41277FCD590041F854 /* Main.storyboard in Resources */, 271 | 6FAFAD60277FCD590041F854 /* Script.js in Resources */, 272 | 6FAFAD64277FCD590041F854 /* Assets.xcassets in Resources */, 273 | 6FAFAD5A277FCD590041F854 /* Main.html in Resources */, 274 | ); 275 | runOnlyForDeploymentPostprocessing = 0; 276 | }; 277 | 6FAFAD50277FCD590041F854 /* Resources */ = { 278 | isa = PBXResourcesBuildPhase; 279 | buildActionMask = 2147483647; 280 | files = ( 281 | 6FAFAD89277FCD5B0041F854 /* manifest-pwa.json in Resources */, 282 | 6FAFAD87277FCD5B0041F854 /* schema.json in Resources */, 283 | 6FAFAD84277FCD5B0041F854 /* images in Resources */, 284 | 6FAFAD88277FCD5B0041F854 /* _locales in Resources */, 285 | 6FAFAD86277FCD5B0041F854 /* view in Resources */, 286 | 6FAFAD83277FCD5B0041F854 /* dist in Resources */, 287 | 6FAFAD85277FCD5B0041F854 /* manifest.json in Resources */, 288 | 6FAFAD82277FCD5B0041F854 /* css in Resources */, 289 | 6FAFAD81277FCD5B0041F854 /* LICENSE in Resources */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | /* End PBXResourcesBuildPhase section */ 294 | 295 | /* Begin PBXSourcesBuildPhase section */ 296 | 6FAFAD37277FCD590041F854 /* Sources */ = { 297 | isa = PBXSourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | 6FAFAD62277FCD590041F854 /* ViewController.swift in Sources */, 301 | 6FAFAD3E277FCD590041F854 /* AppDelegate.swift in Sources */, 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | 6FAFAD4E277FCD590041F854 /* Sources */ = { 306 | isa = PBXSourcesBuildPhase; 307 | buildActionMask = 2147483647; 308 | files = ( 309 | 6FAFAD66277FCD590041F854 /* SafariWebExtensionHandler.swift in Sources */, 310 | ); 311 | runOnlyForDeploymentPostprocessing = 0; 312 | }; 313 | /* End PBXSourcesBuildPhase section */ 314 | 315 | /* Begin PBXTargetDependency section */ 316 | 6FAFAD55277FCD590041F854 /* PBXTargetDependency */ = { 317 | isa = PBXTargetDependency; 318 | target = 6FAFAD51277FCD590041F854 /* Authenticator Extension (macOS) */; 319 | targetProxy = 6FAFAD54277FCD590041F854 /* PBXContainerItemProxy */; 320 | }; 321 | /* End PBXTargetDependency section */ 322 | 323 | /* Begin PBXVariantGroup section */ 324 | 6FAFAD1C277FCD550041F854 /* Main.html */ = { 325 | isa = PBXVariantGroup; 326 | children = ( 327 | 6FAFAD1D277FCD550041F854 /* Base */, 328 | ); 329 | name = Main.html; 330 | sourceTree = ""; 331 | }; 332 | 6FAFAD3F277FCD590041F854 /* Main.storyboard */ = { 333 | isa = PBXVariantGroup; 334 | children = ( 335 | 6FAFAD40277FCD590041F854 /* Base */, 336 | ); 337 | name = Main.storyboard; 338 | sourceTree = ""; 339 | }; 340 | /* End PBXVariantGroup section */ 341 | 342 | /* Begin XCBuildConfiguration section */ 343 | 6FAFAD67277FCD590041F854 /* Debug */ = { 344 | isa = XCBuildConfiguration; 345 | buildSettings = { 346 | ALWAYS_SEARCH_USER_PATHS = NO; 347 | CLANG_ANALYZER_NONNULL = YES; 348 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 349 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 350 | CLANG_CXX_LIBRARY = "libc++"; 351 | CLANG_ENABLE_MODULES = YES; 352 | CLANG_ENABLE_OBJC_ARC = YES; 353 | CLANG_ENABLE_OBJC_WEAK = YES; 354 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 355 | CLANG_WARN_BOOL_CONVERSION = YES; 356 | CLANG_WARN_COMMA = YES; 357 | CLANG_WARN_CONSTANT_CONVERSION = YES; 358 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 359 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 360 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 361 | CLANG_WARN_EMPTY_BODY = YES; 362 | CLANG_WARN_ENUM_CONVERSION = YES; 363 | CLANG_WARN_INFINITE_RECURSION = YES; 364 | CLANG_WARN_INT_CONVERSION = YES; 365 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 366 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 367 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 368 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 369 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 370 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 371 | CLANG_WARN_STRICT_PROTOTYPES = YES; 372 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 373 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 374 | CLANG_WARN_UNREACHABLE_CODE = YES; 375 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 376 | COPY_PHASE_STRIP = NO; 377 | DEBUG_INFORMATION_FORMAT = dwarf; 378 | ENABLE_STRICT_OBJC_MSGSEND = YES; 379 | ENABLE_TESTABILITY = YES; 380 | GCC_C_LANGUAGE_STANDARD = gnu11; 381 | GCC_DYNAMIC_NO_PIC = NO; 382 | GCC_NO_COMMON_BLOCKS = YES; 383 | GCC_OPTIMIZATION_LEVEL = 0; 384 | GCC_PREPROCESSOR_DEFINITIONS = ( 385 | "DEBUG=1", 386 | "$(inherited)", 387 | ); 388 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 389 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 390 | GCC_WARN_UNDECLARED_SELECTOR = YES; 391 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 392 | GCC_WARN_UNUSED_FUNCTION = YES; 393 | GCC_WARN_UNUSED_VARIABLE = YES; 394 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 395 | MTL_FAST_MATH = YES; 396 | ONLY_ACTIVE_ARCH = YES; 397 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 398 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 399 | }; 400 | name = Debug; 401 | }; 402 | 6FAFAD68277FCD590041F854 /* Release */ = { 403 | isa = XCBuildConfiguration; 404 | buildSettings = { 405 | ALWAYS_SEARCH_USER_PATHS = NO; 406 | CLANG_ANALYZER_NONNULL = YES; 407 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 408 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 409 | CLANG_CXX_LIBRARY = "libc++"; 410 | CLANG_ENABLE_MODULES = YES; 411 | CLANG_ENABLE_OBJC_ARC = YES; 412 | CLANG_ENABLE_OBJC_WEAK = YES; 413 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 414 | CLANG_WARN_BOOL_CONVERSION = YES; 415 | CLANG_WARN_COMMA = YES; 416 | CLANG_WARN_CONSTANT_CONVERSION = YES; 417 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 418 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 419 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 420 | CLANG_WARN_EMPTY_BODY = YES; 421 | CLANG_WARN_ENUM_CONVERSION = YES; 422 | CLANG_WARN_INFINITE_RECURSION = YES; 423 | CLANG_WARN_INT_CONVERSION = YES; 424 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 425 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 426 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 427 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 428 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 429 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 430 | CLANG_WARN_STRICT_PROTOTYPES = YES; 431 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 432 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 433 | CLANG_WARN_UNREACHABLE_CODE = YES; 434 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 435 | COPY_PHASE_STRIP = NO; 436 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 437 | ENABLE_NS_ASSERTIONS = NO; 438 | ENABLE_STRICT_OBJC_MSGSEND = YES; 439 | GCC_C_LANGUAGE_STANDARD = gnu11; 440 | GCC_NO_COMMON_BLOCKS = YES; 441 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 442 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 443 | GCC_WARN_UNDECLARED_SELECTOR = YES; 444 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 445 | GCC_WARN_UNUSED_FUNCTION = YES; 446 | GCC_WARN_UNUSED_VARIABLE = YES; 447 | MTL_ENABLE_DEBUG_INFO = NO; 448 | MTL_FAST_MATH = YES; 449 | SWIFT_COMPILATION_MODE = wholemodule; 450 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 451 | }; 452 | name = Release; 453 | }; 454 | 6FAFAD71277FCD590041F854 /* Debug */ = { 455 | isa = XCBuildConfiguration; 456 | buildSettings = { 457 | CODE_SIGN_ENTITLEMENTS = "macOS (Extension)/Authenticator.entitlements"; 458 | CODE_SIGN_STYLE = Automatic; 459 | CURRENT_PROJECT_VERSION = 1; 460 | ENABLE_HARDENED_RUNTIME = YES; 461 | GENERATE_INFOPLIST_FILE = YES; 462 | INFOPLIST_FILE = "macOS (Extension)/Info.plist"; 463 | INFOPLIST_KEY_CFBundleDisplayName = "Authenticator Extension"; 464 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 465 | LD_RUNPATH_SEARCH_PATHS = ( 466 | "$(inherited)", 467 | "@executable_path/../Frameworks", 468 | "@executable_path/../../../../Frameworks", 469 | ); 470 | MACOSX_DEPLOYMENT_TARGET = 10.14; 471 | MARKETING_VERSION = 1.0; 472 | OTHER_LDFLAGS = ( 473 | "-framework", 474 | SafariServices, 475 | ); 476 | PRODUCT_BUNDLE_IDENTIFIER = com.yourCompany.Authenticator.Extension; 477 | PRODUCT_NAME = "Authenticator Extension"; 478 | SDKROOT = macosx; 479 | SKIP_INSTALL = YES; 480 | SWIFT_EMIT_LOC_STRINGS = YES; 481 | SWIFT_VERSION = 5.0; 482 | }; 483 | name = Debug; 484 | }; 485 | 6FAFAD72277FCD590041F854 /* Release */ = { 486 | isa = XCBuildConfiguration; 487 | buildSettings = { 488 | CODE_SIGN_ENTITLEMENTS = "macOS (Extension)/Authenticator.entitlements"; 489 | CODE_SIGN_STYLE = Automatic; 490 | CURRENT_PROJECT_VERSION = 1; 491 | ENABLE_HARDENED_RUNTIME = YES; 492 | GENERATE_INFOPLIST_FILE = YES; 493 | INFOPLIST_FILE = "macOS (Extension)/Info.plist"; 494 | INFOPLIST_KEY_CFBundleDisplayName = "Authenticator Extension"; 495 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 496 | LD_RUNPATH_SEARCH_PATHS = ( 497 | "$(inherited)", 498 | "@executable_path/../Frameworks", 499 | "@executable_path/../../../../Frameworks", 500 | ); 501 | MACOSX_DEPLOYMENT_TARGET = 10.14; 502 | MARKETING_VERSION = 1.0; 503 | OTHER_LDFLAGS = ( 504 | "-framework", 505 | SafariServices, 506 | ); 507 | PRODUCT_BUNDLE_IDENTIFIER = com.yourCompany.Authenticator.Extension; 508 | PRODUCT_NAME = "Authenticator Extension"; 509 | SDKROOT = macosx; 510 | SKIP_INSTALL = YES; 511 | SWIFT_EMIT_LOC_STRINGS = YES; 512 | SWIFT_VERSION = 5.0; 513 | }; 514 | name = Release; 515 | }; 516 | 6FAFAD75277FCD590041F854 /* Debug */ = { 517 | isa = XCBuildConfiguration; 518 | buildSettings = { 519 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 520 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 521 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 522 | CODE_SIGN_ENTITLEMENTS = "macOS (App)/Authenticator.entitlements"; 523 | CODE_SIGN_STYLE = Automatic; 524 | CURRENT_PROJECT_VERSION = 1; 525 | ENABLE_HARDENED_RUNTIME = YES; 526 | GENERATE_INFOPLIST_FILE = YES; 527 | INFOPLIST_FILE = "macOS (App)/Info.plist"; 528 | INFOPLIST_KEY_CFBundleDisplayName = Authenticator; 529 | INFOPLIST_KEY_NSMainStoryboardFile = Main; 530 | INFOPLIST_KEY_NSPrincipalClass = NSApplication; 531 | LD_RUNPATH_SEARCH_PATHS = ( 532 | "$(inherited)", 533 | "@executable_path/../Frameworks", 534 | ); 535 | MACOSX_DEPLOYMENT_TARGET = 10.14; 536 | MARKETING_VERSION = 1.0; 537 | OTHER_LDFLAGS = ( 538 | "-framework", 539 | SafariServices, 540 | "-framework", 541 | WebKit, 542 | ); 543 | PRODUCT_BUNDLE_IDENTIFIER = com.yourCompany.Authenticator; 544 | PRODUCT_NAME = Authenticator; 545 | SDKROOT = macosx; 546 | SWIFT_EMIT_LOC_STRINGS = YES; 547 | SWIFT_VERSION = 5.0; 548 | }; 549 | name = Debug; 550 | }; 551 | 6FAFAD76277FCD590041F854 /* Release */ = { 552 | isa = XCBuildConfiguration; 553 | buildSettings = { 554 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 555 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 556 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 557 | CODE_SIGN_ENTITLEMENTS = "macOS (App)/Authenticator.entitlements"; 558 | CODE_SIGN_STYLE = Automatic; 559 | CURRENT_PROJECT_VERSION = 1; 560 | ENABLE_HARDENED_RUNTIME = YES; 561 | GENERATE_INFOPLIST_FILE = YES; 562 | INFOPLIST_FILE = "macOS (App)/Info.plist"; 563 | INFOPLIST_KEY_CFBundleDisplayName = Authenticator; 564 | INFOPLIST_KEY_NSMainStoryboardFile = Main; 565 | INFOPLIST_KEY_NSPrincipalClass = NSApplication; 566 | LD_RUNPATH_SEARCH_PATHS = ( 567 | "$(inherited)", 568 | "@executable_path/../Frameworks", 569 | ); 570 | MACOSX_DEPLOYMENT_TARGET = 10.14; 571 | MARKETING_VERSION = 1.0; 572 | OTHER_LDFLAGS = ( 573 | "-framework", 574 | SafariServices, 575 | "-framework", 576 | WebKit, 577 | ); 578 | PRODUCT_BUNDLE_IDENTIFIER = com.yourCompany.Authenticator; 579 | PRODUCT_NAME = Authenticator; 580 | SDKROOT = macosx; 581 | SWIFT_EMIT_LOC_STRINGS = YES; 582 | SWIFT_VERSION = 5.0; 583 | }; 584 | name = Release; 585 | }; 586 | /* End XCBuildConfiguration section */ 587 | 588 | /* Begin XCConfigurationList section */ 589 | 6FAFAD19277FCD540041F854 /* Build configuration list for PBXProject "Authenticator" */ = { 590 | isa = XCConfigurationList; 591 | buildConfigurations = ( 592 | 6FAFAD67277FCD590041F854 /* Debug */, 593 | 6FAFAD68277FCD590041F854 /* Release */, 594 | ); 595 | defaultConfigurationIsVisible = 0; 596 | defaultConfigurationName = Release; 597 | }; 598 | 6FAFAD70277FCD590041F854 /* Build configuration list for PBXNativeTarget "Authenticator Extension (macOS)" */ = { 599 | isa = XCConfigurationList; 600 | buildConfigurations = ( 601 | 6FAFAD71277FCD590041F854 /* Debug */, 602 | 6FAFAD72277FCD590041F854 /* Release */, 603 | ); 604 | defaultConfigurationIsVisible = 0; 605 | defaultConfigurationName = Release; 606 | }; 607 | 6FAFAD74277FCD590041F854 /* Build configuration list for PBXNativeTarget "Authenticator (macOS)" */ = { 608 | isa = XCConfigurationList; 609 | buildConfigurations = ( 610 | 6FAFAD75277FCD590041F854 /* Debug */, 611 | 6FAFAD76277FCD590041F854 /* Release */, 612 | ); 613 | defaultConfigurationIsVisible = 0; 614 | defaultConfigurationName = Release; 615 | }; 616 | /* End XCConfigurationList section */ 617 | }; 618 | rootObject = 6FAFAD16277FCD540041F854 /* Project object */; 619 | } 620 | -------------------------------------------------------------------------------- /Authenticator.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Authenticator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 rebornix 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "iphone-icon-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "iphone-icon-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "iphone-icon-29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "iphone-icon-29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "iphone-icon-40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "iphone-icon-40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "iphone-icon-60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "iphone-icon-60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "ipad-icon-20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "ipad-icon-20@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "ipad-icon-29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "ipad-icon-29@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "ipad-icon-40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "ipad-icon-40@2x.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "ipad-icon-76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "ipad-icon-76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "ipad-icon-83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "ios-marketing-icon-1024@1x.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "16x16", 113 | "idiom" : "mac", 114 | "filename" : "mac-icon-16@1x.png", 115 | "scale" : "1x" 116 | }, 117 | { 118 | "size" : "16x16", 119 | "idiom" : "mac", 120 | "filename" : "mac-icon-16@2x.png", 121 | "scale" : "2x" 122 | }, 123 | { 124 | "size" : "32x32", 125 | "idiom" : "mac", 126 | "filename" : "mac-icon-32@1x.png", 127 | "scale" : "1x" 128 | }, 129 | { 130 | "size" : "32x32", 131 | "idiom" : "mac", 132 | "filename" : "mac-icon-32@2x.png", 133 | "scale" : "2x" 134 | }, 135 | { 136 | "size" : "128x128", 137 | "idiom" : "mac", 138 | "filename" : "mac-icon-128@1x.png", 139 | "scale" : "1x" 140 | }, 141 | { 142 | "size" : "128x128", 143 | "idiom" : "mac", 144 | "filename" : "mac-icon-128@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "256x256", 149 | "idiom" : "mac", 150 | "filename" : "mac-icon-256@1x.png", 151 | "scale" : "1x" 152 | }, 153 | { 154 | "size" : "256x256", 155 | "idiom" : "mac", 156 | "filename" : "mac-icon-256@2x.png", 157 | "scale" : "2x" 158 | }, 159 | { 160 | "size" : "512x512", 161 | "idiom" : "mac", 162 | "filename" : "mac-icon-512@1x.png", 163 | "scale" : "1x" 164 | }, 165 | { 166 | "size" : "512x512", 167 | "idiom" : "mac", 168 | "filename" : "mac-icon-512@2x.png", 169 | "scale" : "2x" 170 | } 171 | ], 172 | "info" : { 173 | "version" : 1, 174 | "author" : "xcode" 175 | } 176 | } -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ios-marketing-icon-1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ios-marketing-icon-1024@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-20@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-20@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-29@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-29@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-40@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-40@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-76@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-76@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/ipad-icon-83.5@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-20@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-20@3x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-29@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-29@3x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-40@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-40@3x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-60@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/iphone-icon-60@3x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/LargeIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "icon128.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png -------------------------------------------------------------------------------- /Shared (App)/Base.lproj/Main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Authenticator Icon 14 |

You can turn on Authenticator’s Safari extension in Settings.

15 |

You can turn on Authenticator’s extension in Safari Extensions preferences.

16 |

Authenticator’s extension is currently on. You can turn it off in Safari Extensions preferences.

17 |

Authenticator’s extension is currently off. You can turn it on in Safari Extensions preferences.

18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Shared (App)/Resources/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Authenticator-Extension/Authen/be1d41b2187c8dc8ac635eccee27fc6b7792989f/Shared (App)/Resources/Icon.png -------------------------------------------------------------------------------- /Shared (App)/Resources/Script.js: -------------------------------------------------------------------------------- 1 | function show(platform, enabled) { 2 | document.body.classList.add(`platform-${platform}`); 3 | 4 | if (typeof enabled === "boolean") { 5 | document.body.classList.toggle(`state-on`, enabled); 6 | document.body.classList.toggle(`state-off`, !enabled); 7 | } else { 8 | document.body.classList.remove(`state-on`); 9 | document.body.classList.remove(`state-off`); 10 | } 11 | } 12 | 13 | function openPreferences() { 14 | webkit.messageHandlers.controller.postMessage("open-preferences"); 15 | } 16 | 17 | document.querySelector("button.open-preferences").addEventListener("click", openPreferences); 18 | -------------------------------------------------------------------------------- /Shared (App)/Resources/Style.css: -------------------------------------------------------------------------------- 1 | * { 2 | -webkit-user-select: none; 3 | -webkit-user-drag: none; 4 | cursor: default; 5 | } 6 | 7 | :root { 8 | color-scheme: light dark; 9 | 10 | --spacing: 20px; 11 | } 12 | 13 | html { 14 | height: 100%; 15 | } 16 | 17 | body { 18 | display: flex; 19 | align-items: center; 20 | justify-content: center; 21 | flex-direction: column; 22 | 23 | gap: var(--spacing); 24 | margin: 0 calc(var(--spacing) * 2); 25 | height: 100%; 26 | 27 | font: -apple-system-short-body; 28 | text-align: center; 29 | } 30 | 31 | body:not(.platform-mac, .platform-ios) :is(.platform-mac, .platform-ios) { 32 | display: none; 33 | } 34 | 35 | body.platform-ios .platform-mac { 36 | display: none; 37 | } 38 | 39 | body.platform-mac .platform-ios { 40 | display: none; 41 | } 42 | 43 | body.platform-ios .platform-mac { 44 | display: none; 45 | } 46 | 47 | body:not(.state-on, .state-off) :is(.state-on, .state-off) { 48 | display: none; 49 | } 50 | 51 | body.state-on :is(.state-off, .state-unknown) { 52 | display: none; 53 | } 54 | 55 | body.state-off :is(.state-on, .state-unknown) { 56 | display: none; 57 | } 58 | 59 | button { 60 | font-size: 1em; 61 | } 62 | -------------------------------------------------------------------------------- /Shared (App)/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Shared (App) 4 | // 5 | // Created by penlv on 12/31/21. 6 | // 7 | 8 | import WebKit 9 | 10 | #if os(iOS) 11 | import UIKit 12 | typealias PlatformViewController = UIViewController 13 | #elseif os(macOS) 14 | import Cocoa 15 | import SafariServices 16 | typealias PlatformViewController = NSViewController 17 | #endif 18 | 19 | let extensionBundleIdentifier = "com.yourCompany.Authenticator.Extension" 20 | 21 | class ViewController: PlatformViewController, WKNavigationDelegate, WKScriptMessageHandler { 22 | 23 | @IBOutlet var webView: WKWebView! 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | 28 | self.webView.navigationDelegate = self 29 | 30 | #if os(iOS) 31 | self.webView.scrollView.isScrollEnabled = false 32 | #endif 33 | 34 | self.webView.configuration.userContentController.add(self, name: "controller") 35 | 36 | self.webView.loadFileURL(Bundle.main.url(forResource: "Main", withExtension: "html")!, allowingReadAccessTo: Bundle.main.resourceURL!) 37 | } 38 | 39 | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 40 | #if os(iOS) 41 | webView.evaluateJavaScript("show('ios')") 42 | #elseif os(macOS) 43 | webView.evaluateJavaScript("show('mac')") 44 | 45 | SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier: extensionBundleIdentifier) { (state, error) in 46 | guard let state = state, error == nil else { 47 | // Insert code to inform the user that something went wrong. 48 | return 49 | } 50 | 51 | DispatchQueue.main.async { 52 | webView.evaluateJavaScript("show('mac', \(state.isEnabled))") 53 | } 54 | } 55 | #endif 56 | } 57 | 58 | func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 59 | #if os(macOS) 60 | if (message.body as! String != "open-preferences") { 61 | return; 62 | } 63 | 64 | SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in 65 | guard error == nil else { 66 | // Insert code to inform the user that something went wrong. 67 | return 68 | } 69 | 70 | DispatchQueue.main.async { 71 | NSApplication.shared.terminate(nil) 72 | } 73 | } 74 | #endif 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /Shared (Extension)/SafariWebExtensionHandler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SafariWebExtensionHandler.swift 3 | // Shared (Extension) 4 | // 5 | // Created by penlv on 12/31/21. 6 | // 7 | 8 | import SafariServices 9 | import os.log 10 | 11 | let SFExtensionMessageKey = "message" 12 | 13 | class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { 14 | 15 | func beginRequest(with context: NSExtensionContext) { 16 | let item = context.inputItems[0] as! NSExtensionItem 17 | let message = item.userInfo?[SFExtensionMessageKey] 18 | os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@", message as! CVarArg) 19 | 20 | let response = NSExtensionItem() 21 | response.userInfo = [ SFExtensionMessageKey: [ "Response to": message ] ] 22 | 23 | context.completeRequest(returningItems: [response], completionHandler: nil) 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /macOS (App)/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // macOS (App) 4 | // 5 | // Created by penlv on 12/31/21. 6 | // 7 | 8 | import Cocoa 9 | 10 | @main 11 | class AppDelegate: NSObject, NSApplicationDelegate { 12 | 13 | func applicationDidFinishLaunching(_ notification: Notification) { 14 | // Override point for customization after application launch. 15 | } 16 | 17 | func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 18 | return true 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /macOS (App)/Authenticator.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.network.client 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /macOS (App)/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /macOS (App)/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SFSafariWebExtensionConverterVersion 6 | 13.2.1 7 | 8 | 9 | -------------------------------------------------------------------------------- /macOS (Extension)/Authenticator.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /macOS (Extension)/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSExtension 6 | 7 | NSExtensionPointIdentifier 8 | com.apple.Safari.web-extension 9 | NSExtensionPrincipalClass 10 | $(PRODUCT_MODULE_NAME).SafariWebExtensionHandler 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Authen 2 | 3 | Safari extension distro for [Authenticator](https://github.com/Authenticator-Extension/Authenticator) 4 | 5 | Download on the App Store 6 | 7 | ![2560x1600bb](https://user-images.githubusercontent.com/876920/176361939-a359dd46-254a-4784-86bf-19f9c999f5aa.png) 8 | 9 | ## How to contribute 10 | 11 | * Clone the project 12 | * `git submodule update --remote` to update the sub module for [Authenticator](https://github.com/Authenticator-Extension/Authenticator) 13 | * `npm ci && npm run chrome` 14 | * Launch the project and run --------------------------------------------------------------------------------