From b6288ee12b7b2dddeb97fe9624f9d90e3c5c217f Mon Sep 17 00:00:00 2001 From: Alex Bobrikovich Date: Fri, 24 Jun 2022 15:55:52 +0200 Subject: [PATCH] Add code quality tools (#42) --- CHANGES.md | 4 + build.gradle | 2 +- example-app/src/main/AndroidManifest.xml | 1 + .../main/java/com/hcaptcha/example/App.java | 26 ++ gradle/config/checkstyle.xml | 385 ++++++++++++++++++ gradle/config/cve.xml | 113 +++++ gradle/config/findbugs-exclude.xml | 30 ++ gradle/config/pmd.xml | 18 + lombok.config | 5 + sdk/build.gradle | 62 ++- sdk/src/androidTest/assets/hcaptcha-form.html | 3 +- .../java/com/hcaptcha/sdk/AssertUtil.java | 37 +- .../hcaptcha/sdk/ExampleInstrumentedTest.java | 7 +- .../sdk/HCaptchaDialogFragmentTest.java | 66 +-- .../sdk/HCaptchaHeadlessWebViewTest.java | 15 +- .../sdk/HCaptchaStateTestAdapter.java | 7 +- sdk/src/main/assets/hcaptcha-form.html | 7 +- .../main/java/com/hcaptcha/sdk/HCaptcha.java | 45 +- .../com/hcaptcha/sdk/HCaptchaDebugInfo.java | 134 ++++-- .../hcaptcha/sdk/HCaptchaDialogFragment.java | 22 +- .../java/com/hcaptcha/sdk/HCaptchaError.java | 9 +- .../com/hcaptcha/sdk/HCaptchaException.java | 1 + .../hcaptcha/sdk/HCaptchaHeadlessWebView.java | 20 +- .../com/hcaptcha/sdk/HCaptchaJSInterface.java | 1 + .../java/com/hcaptcha/sdk/HCaptchaSize.java | 1 + .../hcaptcha/sdk/HCaptchaStateListener.java | 6 +- .../java/com/hcaptcha/sdk/HCaptchaTheme.java | 1 + .../hcaptcha/sdk/HCaptchaWebViewHelper.java | 15 +- .../main/java/com/hcaptcha/sdk/IHCaptcha.java | 8 +- .../com/hcaptcha/sdk/IHCaptchaVerifier.java | 1 + .../hcaptcha/sdk/tasks/OnFailureListener.java | 4 +- .../hcaptcha/sdk/tasks/OnSuccessListener.java | 4 +- .../java/com/hcaptcha/sdk/tasks/Task.java | 8 +- .../com/hcaptcha/sdk/HCaptchaConfigTest.java | 13 +- .../com/hcaptcha/sdk/HCaptchaErrorTest.java | 10 +- .../hcaptcha/sdk/HCaptchaExceptionTest.java | 15 +- .../hcaptcha/sdk/HCaptchaJSInterfaceTest.java | 42 +- .../com/hcaptcha/sdk/HCaptchaSizeTest.java | 4 +- .../java/com/hcaptcha/sdk/HCaptchaTest.java | 26 +- .../com/hcaptcha/sdk/HCaptchaThemeTest.java | 4 +- .../sdk/HCaptchaWebViewHelperTest.java | 10 +- 41 files changed, 971 insertions(+), 221 deletions(-) create mode 100644 example-app/src/main/java/com/hcaptcha/example/App.java create mode 100644 gradle/config/checkstyle.xml create mode 100644 gradle/config/cve.xml create mode 100644 gradle/config/findbugs-exclude.xml create mode 100644 gradle/config/pmd.xml create mode 100644 lombok.config diff --git a/CHANGES.md b/CHANGES.md index a36ac88d..d752704d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # Changelog +# 3.1.0 + +- Add `pmd`, `checkstyle`, `spotbugs` tools to build system ([#40](https://github.com/hCaptcha/hcaptcha-android-sdk/issues/40)) + # 3.0.0 - Add new boolean config option `HCaptchaConfig.hideDialog`. diff --git a/build.gradle b/build.gradle index ce622ead..2135ac58 100644 --- a/build.gradle +++ b/build.gradle @@ -3,10 +3,10 @@ buildscript { repositories { google() mavenCentral() + maven { url 'https://jitpack.io' } } dependencies { classpath 'com.android.tools.build:gradle:4.1.3' - // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/example-app/src/main/AndroidManifest.xml b/example-app/src/main/AndroidManifest.xml index 92f8d8f8..9cdc15ca 100644 --- a/example-app/src/main/AndroidManifest.xml +++ b/example-app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle/config/cve.xml b/gradle/config/cve.xml new file mode 100644 index 00000000..545593c0 --- /dev/null +++ b/gradle/config/cve.xml @@ -0,0 +1,113 @@ + + + + + ^pkg:generic/openssl@.*$ + CVE-1999-0428 + + + + ^pkg:generic/openssl@.*$ + CVE-2009-0590 + + + + ^pkg:generic/openssl@.*$ + CVE-2019-0190 + + + + ^pkg:generic/openssl@.*$ + CVE-2019-1551 + + + + 636cf935a0fd1451657a4112974b3500cce3ab84 + CVE-2019-11065 + + + + 636cf935a0fd1451657a4112974b3500cce3ab84 + CVE-2019-15052 + + + + ^pkg:maven/org\.bouncycastle/bcprov\-jdk15on@.*$ + CVE-2017-13098 + + + + ^pkg:maven/org\.bouncycastle/bcprov\-jdk15on@.*$ + CVE-2018-1000180 + + + + ^pkg:maven/org\.bouncycastle/bcprov\-jdk15on@.*$ + CVE-2018-1000613 + + + + ^pkg:maven/org\.apache\.commons/commons\-compress@.*$ + CVE-2018-11771 + + + + ^pkg:maven/org\.apache\.commons/commons\-compress@.*$ + CVE-2018-1324 + + + + ^pkg:maven/com\.google\.protobuf/protobuf\-java@.*$ + CVE-2015-5237 + + + + ^pkg:maven/com\.google\.guava/guava@.*$ + CVE-2018-10237 + + diff --git a/gradle/config/findbugs-exclude.xml b/gradle/config/findbugs-exclude.xml new file mode 100644 index 00000000..635034dd --- /dev/null +++ b/gradle/config/findbugs-exclude.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle/config/pmd.xml b/gradle/config/pmd.xml new file mode 100644 index 00000000..6cf6c3c7 --- /dev/null +++ b/gradle/config/pmd.xml @@ -0,0 +1,18 @@ + + + HCaptcha Android SDK RuleSet + .*/R.java + .*/gen/.* + + + + + + + + + + diff --git a/lombok.config b/lombok.config new file mode 100644 index 00000000..b3a159f8 --- /dev/null +++ b/lombok.config @@ -0,0 +1,5 @@ +config.stopBubbling = true +lombok.addLombokGeneratedAnnotation = true +lombok.extern.findbugs.addSuppressFBWarnings = true +lombok.addNullAnnotations = findbugs +lombok.addSuppressWarnings = false \ No newline at end of file diff --git a/sdk/build.gradle b/sdk/build.gradle index 01bd483b..1cf2c1f9 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "pmd" + id "checkstyle" + id "com.github.spotbugs" version "4.8.0" + id "org.owasp.dependencycheck" version "7.1.1" +} + apply plugin: 'com.android.library' apply plugin: 'maven-publish' @@ -12,11 +19,11 @@ android { // See https://developer.android.com/studio/publish/versioning // versionCode must be integer and be incremented by one for every new update // android system uses this to prevent downgrades - versionCode 13 + versionCode 14 // version number visible to the user // should follow semantic versioning (See https://semver.org) - versionName "3.0.0" + versionName "3.1.0" buildConfigField 'String', 'VERSION_NAME', "\"${defaultConfig.versionName}_${defaultConfig.versionCode}\"" @@ -58,6 +65,8 @@ dependencies { androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' debugImplementation 'androidx.fragment:fragment-testing:1.4.1' + + compileOnly 'com.google.code.findbugs:annotations:3.0.1' } task androidJavadocs(type: Javadoc) { @@ -150,3 +159,52 @@ android.libraryVariants.all { variant -> } }) } + +task checkstyle(type: Checkstyle) { + description 'Check code standard' + group 'verification' + configFile file("${rootDir}/gradle/config/checkstyle.xml") + source 'src' + include '**/*.java' + exclude '**/gen/**' + classpath = files() + ignoreFailures = false + maxWarnings = 0 +} + +task pmd(type: Pmd) { + ruleSetFiles = files("${project.rootDir}/gradle/config/pmd.xml") + ignoreFailures = false + ruleSets = [] + source 'src' + include '**/*.java' + exclude '**/gen/**' + reports { + xml.enabled = false + html.enabled = true + html.destination = file("$project.buildDir/outputs/pmd/pmd.html") + } +} + +spotbugs { + ignoreFailures = false + showStackTraces = true + showProgress = false + reportLevel = 'high' + excludeFilter = file("${project.rootDir}/gradle/config/findbugs-exclude.xml") + onlyAnalyze = ['com.hcaptcha.sdk.*'] + projectName = name + release = version +} + +// enable html report +gradle.taskGraph.beforeTask { task -> + if (task.name.toLowerCase().contains('spotbugs')) { + task.reports { + html.enabled = true + xml.enabled = true + } + } +} + +check.dependsOn('checkstyle', 'pmd') diff --git a/sdk/src/androidTest/assets/hcaptcha-form.html b/sdk/src/androidTest/assets/hcaptcha-form.html index 7a366817..09123100 100644 --- a/sdk/src/androidTest/assets/hcaptcha-form.html +++ b/sdk/src/androidTest/assets/hcaptcha-form.html @@ -11,7 +11,8 @@ +