run method

  1. @override
Future<AuditResult> run(
  1. ProjectContext context
)
override

Executes the audit.

Implementation

@override
Future<AuditResult> run(ProjectContext context) async {
  final File manifest = context.androidManifest;

  if (!manifest.existsSync()) {
    return const AuditResult(issues: []);
  }

  final document = await AndroidManifestHelper.load(context);

  if (document == null) {
    return const AuditResult(issues: []);
  }

  final application = document.rootElement.getElement('application');

  if (application == null) {
    return const AuditResult(issues: []);
  }

  final allowBackup = application.getAttribute(
    'allowBackup',
    namespace: 'http://schemas.android.com/apk/res/android',
  );

  if (allowBackup != 'true') {
    return const AuditResult(issues: []);
  }

  return AuditResult(
    issues: [
      SecurityIssue(
        id: id,
        title: 'Android Backup Enabled',
        description: 'The application allows Android backups.',
        severity: Severity.high,
        file: manifest.path,
        recommendation:
            'Set android:allowBackup="false" in AndroidManifest.xml.',
      ),
    ],
  );
}