Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.0.0

* Changed package name to `security_toolkit`.

## 1.1.0

* Migrates plugin to built-in Kotlin & AGP 9.
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ for frequent breaking changes.
Whenever you wish to update the Pigeon bindings, simply run:

```shell
dart run pigeon --input pigeons/security_suite_messages.dart
dart run pigeon --input pigeons/security_toolkit_messages.dart
```

Generated pigeon bindings are source-controlled in this package due to it being published
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
flutter_security_suite
security_toolkit

MIT License

Expand Down
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# Flutter Security Suite

> [!IMPORTANT]
> Whilst this plugin is open-source, and you are free to use according to the license, this is
> primarily a convenience for internal Apadmi projects. Our priorities responding to issues
Expand Down Expand Up @@ -27,9 +25,9 @@ Usage of this plugin has the following requirements:

## Usage

A single class, `SecuritySuite`, is exposed which has a number of static methods to perform the
A single class, `SecurityToolkit`, is exposed which has a number of static methods to perform the
checks listed above. That said, most of the time you'll simply want to use
`SecuritySuite.checkSecureEnvironment()` for a single, comprehensive check.
`SecurityToolkit.checkSecureEnvironment()` for a single, comprehensive check.

## Considerations

Expand Down
4 changes: 2 additions & 2 deletions android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
group = "com.apadmi.flutter_security_suite"
group = "com.apadmi.security_toolkit"
version = "1.0-SNAPSHOT"

buildscript {
Expand Down Expand Up @@ -26,7 +26,7 @@ plugins {
}

android {
namespace = "com.apadmi.flutter_security_suite"
namespace = "com.apadmi.security_toolkit"

compileSdk = 36

Expand Down
2 changes: 1 addition & 1 deletion android/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = "flutter_security_suite"
rootProject.name = "security_toolkit"
2 changes: 1 addition & 1 deletion android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.apadmi.flutter_security_suite">
package="com.apadmi.security_toolkit">
</manifest>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.apadmi.flutter_security_suite
package com.apadmi.security_toolkit

import android.os.Build
import android.view.inputmethod.InputMethodManager
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v25.3.1), do not edit directly.
// Autogenerated from Pigeon (v26.3.4), do not edit directly.
// See also: https://pub.dev/packages/pigeon
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")

Expand All @@ -12,14 +12,14 @@ import io.flutter.plugin.common.StandardMethodCodec
import io.flutter.plugin.common.StandardMessageCodec
import java.io.ByteArrayOutputStream
import java.nio.ByteBuffer
private object SecuritySuiteApiPigeonUtils {
private object SecurityToolkitApiPigeonUtils {

fun wrapResult(result: Any?): List<Any?> {
return listOf(result)
}

fun wrapError(exception: Throwable): List<Any?> {
return if (exception is FlutterSecuritySuiteError) {
return if (exception is SecurityToolkitError) {
listOf(
exception.code,
exception.message,
Expand All @@ -41,12 +41,12 @@ private object SecuritySuiteApiPigeonUtils {
* @property message The error message.
* @property details The error details. Must be a datatype supported by the api codec.
*/
class FlutterSecuritySuiteError (
class SecurityToolkitError (
val code: String,
override val message: String? = null,
val details: Any? = null
) : Throwable()
private open class SecuritySuiteApiPigeonCodec : StandardMessageCodec() {
) : RuntimeException()
private open class SecurityToolkitApiPigeonCodec : StandardMessageCodec() {
override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
return super.readValueOfType(type, buffer)
}
Expand All @@ -56,29 +56,29 @@ private open class SecuritySuiteApiPigeonCodec : StandardMessageCodec() {
}

/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
interface SecuritySuiteApi {
interface SecurityToolkitApi {
fun isRooted(): Boolean
fun isDebugged(): Boolean
fun isLikelyEmulator(): Boolean
fun isReverseEngineered(): Boolean

companion object {
/** The codec used by SecuritySuiteApi. */
/** The codec used by SecurityToolkitApi. */
val codec: MessageCodec<Any?> by lazy {
SecuritySuiteApiPigeonCodec()
SecurityToolkitApiPigeonCodec()
}
/** Sets up an instance of `SecuritySuiteApi` to handle messages through the `binaryMessenger`. */
/** Sets up an instance of `SecurityToolkitApi` to handle messages through the `binaryMessenger`. */
@JvmOverloads
fun setUp(binaryMessenger: BinaryMessenger, api: SecuritySuiteApi?, messageChannelSuffix: String = "") {
fun setUp(binaryMessenger: BinaryMessenger, api: SecurityToolkitApi?, messageChannelSuffix: String = "") {
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isRooted$separatedMessageChannelSuffix", codec)
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isRooted$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.isRooted())
} catch (exception: Throwable) {
SecuritySuiteApiPigeonUtils.wrapError(exception)
SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
Expand All @@ -87,13 +87,13 @@ interface SecuritySuiteApi {
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isDebugged$separatedMessageChannelSuffix", codec)
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isDebugged$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.isDebugged())
} catch (exception: Throwable) {
SecuritySuiteApiPigeonUtils.wrapError(exception)
SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
Expand All @@ -102,13 +102,13 @@ interface SecuritySuiteApi {
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isLikelyEmulator$separatedMessageChannelSuffix", codec)
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isLikelyEmulator$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.isLikelyEmulator())
} catch (exception: Throwable) {
SecuritySuiteApiPigeonUtils.wrapError(exception)
SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
Expand All @@ -117,13 +117,13 @@ interface SecuritySuiteApi {
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_security_suite.SecuritySuiteApi.isReverseEngineered$separatedMessageChannelSuffix", codec)
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.security_toolkit.SecurityToolkitApi.isReverseEngineered$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.isReverseEngineered())
} catch (exception: Throwable) {
SecuritySuiteApiPigeonUtils.wrapError(exception)
SecurityToolkitApiPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.apadmi.flutter_security_suite
package com.apadmi.security_toolkit

import SecuritySuiteApi
import SecurityToolkitApi
import android.content.Context
import android.content.pm.ApplicationInfo
import com.scottyab.rootbeer.RootBeer

class SecuritySuiteImpl(
class SecurityToolkitImpl(
private val context: Context,
private val emulatorChecker: EmulatorChecker,
private val rootBeer: RootBeer,
): SecuritySuiteApi {
): SecurityToolkitApi {
override fun isRooted(): Boolean = rootBeer.isRooted

override fun isDebugged(): Boolean = BuildConfig.DEBUG || context.applicationContext.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.apadmi.flutter_security_suite
package com.apadmi.security_toolkit

import SecuritySuiteApi
import SecurityToolkitApi
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result

class FlutterSecuritySuitePlugin: FlutterPlugin {
class SecurityToolkitPlugin: FlutterPlugin {
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
val securityApi = ServiceLocator.getSecuritySuite(flutterPluginBinding.applicationContext)
SecuritySuiteApi.setUp(flutterPluginBinding.binaryMessenger, securityApi)
val securityApi = ServiceLocator.getSecurityToolkit(flutterPluginBinding.applicationContext)
SecurityToolkitApi.setUp(flutterPluginBinding.binaryMessenger, securityApi)
}

override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.apadmi.flutter_security_suite
package com.apadmi.security_toolkit

import SecuritySuiteApi
import SecurityToolkitApi
import android.content.Context
import android.view.inputmethod.InputMethodManager
import com.scottyab.rootbeer.RootBeer
Expand All @@ -15,6 +15,6 @@ object ServiceLocator {
private fun getInputMethodManager(context: Context): InputMethodManager =
context.getSystemService(InputMethodManager::class.java)

fun getSecuritySuite(context: Context): SecuritySuiteApi =
SecuritySuiteImpl(context, getEmulatorChecker(context), getRootBeer(context))
fun getSecurityToolkit(context: Context): SecurityToolkitApi =
SecurityToolkitImpl(context, getEmulatorChecker(context), getRootBeer(context))
}
4 changes: 2 additions & 2 deletions example/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# flutter_security_suite_example
# security_toolkit_example

Demonstrates how to use the flutter_security_suite plugin.
Demonstrates how to use the security_toolkit plugin.
4 changes: 2 additions & 2 deletions example/android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

android {
namespace = "com.example.flutter_security_suite_example"
namespace = "com.apadmi.security_toolkit_example"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion

Expand All @@ -16,7 +16,7 @@ android {

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.flutter_security_suite_example"
applicationId = "com.apadmi.security_toolkit_example"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
Expand Down
2 changes: 1 addition & 1 deletion example/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="flutter_security_suite_example"
android:label="security_toolkit_example"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.flutter_security_suite_example
package com.apadmi.security_toolkit_example

import io.flutter.embedding.android.FlutterActivity

Expand Down
4 changes: 4 additions & 0 deletions example/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
784666492D4C4C64000A1A5F /* FlutterFramework */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterFramework; path = Flutter/ephemeral/Packages/.packages/FlutterFramework; sourceTree = "<group>"; };
78DABEA22ED26510000E7860 /* security_toolkit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = security_toolkit; path = ../../ios/security_toolkit; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -86,6 +88,8 @@
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
78DABEA22ED26510000E7860 /* security_toolkit */,
784666492D4C4C64000A1A5F /* FlutterFramework */,
78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */,
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
Expand Down
2 changes: 1 addition & 1 deletion example/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>flutter_security_suite_example</string>
<string>security_toolkit_example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
Expand Down
13 changes: 5 additions & 8 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_security_suite/flutter_security_suite.dart';
import 'package:flutter_security_suite_example/widgets/overall.dart';
import 'package:flutter_security_suite_example/widgets/security_reading.dart';
import 'package:security_toolkit/security_toolkit.dart';
import 'package:security_toolkit_example/widgets/overall.dart';
import 'package:security_toolkit_example/widgets/security_reading.dart';

void main() {
runApp(const MyApp());
Expand All @@ -30,10 +27,10 @@ class _MyAppState extends State<MyApp> {
builder: (context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter Security Suite Example'),
title: const Text('Security Toolkit Example'),
),
body: FutureBuilder(
future: SecuritySuite.checkSecureEnvironment(),
future: SecurityToolkit.checkSecureEnvironment(),
builder:
(_, state) => switch (state) {
AsyncSnapshot(connectionState: ConnectionState.waiting) =>
Expand Down
2 changes: 1 addition & 1 deletion example/lib/widgets/overall.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_security_suite/flutter_security_suite.dart';
import 'package:security_toolkit/security_toolkit.dart';

class OverallSecurityReading extends StatelessWidget {
final SecurityCheckResult result;
Expand Down
2 changes: 1 addition & 1 deletion example/lib/widgets/security_reading.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_security_suite_example/utils/color_ext.dart';
import 'package:security_toolkit_example/utils/color_ext.dart';

class IndividualSecurityReading extends StatelessWidget {
final String name;
Expand Down
14 changes: 7 additions & 7 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.0"
flutter_security_suite:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "1.1.0"
flutter_test:
dependency: "direct dev"
description: flutter
Expand Down Expand Up @@ -193,6 +186,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.3"
security_toolkit:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "2.0.0"
sky_engine:
dependency: transitive
description: flutter
Expand Down
Loading