I think we should not be making our own password-based or other secure
build tools within the Cordova project unless it is absolutely necessary.

This looks like a problem that is not unique to Cordova app development.

I think this is something that should be done by other tools such as
Gradle, Android Studio, Android command-line tool, etc.

I think it would be much safer to leave this kind of thing to underlying
tools, which have both a wider audience and are more likely to have the
right kind of expertise, than our own tooling.

In case any of us are able to make a password-based build tool that could
help others, and it could benefit our users, that would be awesome.

I would compare this to the way that Capacitor expects users to use
platform-specific IDEs to build and run on the mobile platforms.


On Wed, Jul 15, 2020 at 9:24 PM Norman Breau <nor...@normanbreau.com> wrote:

> Hi Team,
>
> Looking for some opinions on the keystore password prompt, when building
> for android.
>
> TL;DR; is this feature worth keeping?
>
> If you're not aware, if you leave either the store password or the key
> password blank/empty string inside
> the build.json file, then we have a gradle implementation to prompt the
> user for a password.
>
> It was recently been discovered that it was broken.I went back several
> versions of both gradle and cordova-android, but I was unable to find
> when it was not broken. Some research suggest that the prompt would have
> been broken since gradle 3.x.
>
> There is two problems with the prompt. The first issue is that when
> using a gradle daemon, or if you change any of the default java settings
> (which we do, cause we need to set -Xmx to at least 2gb to handle
> android builds with dex), then gradle will spawn a subprocess to do a
> gradle build. This means gradle does not have a console attached and
> cannot receive user input.
>
> cordova-android currently will fail with "Failed to create component for
> 'dialog' reason: java.awt.HeadlessException"
>
> I've created a PR that addresses this issue by making the password
> prompt use a GUI, if the console is not available, which works, but
> exposes the second issue. I've spent a considerable amount of time
> trying to fix but I haven't been able to find a solution.
>
> The issue is that gradle password prompts doesn't appear to work at all,
> regardless if you use the GUI method, or the console input method. It
> always results in a "Keystore was tampered with, or password was
> incorrect".
>
> I've observed this using my own keystore I use for apps. If I put the
> password in the build.json file, it works. If I use the password prompt,
> it doesn't work. I've produced logging to determine that the password
> prompt is receiving the correct text as expected, and I've confirmed
> that the android signingConfigs has the correct information. It's a
> rather weird problem, and you can try this yourself by applying the
> prompt fix PR.
>
> I've already talked to Erisu about possible workarounds, but we
> determined if we need this feature, the implementation must be kept at
> the gradle level. Otherwise, you'll be introducing security
> vulnerabilities.
>
> So before I spend anymore time on this, I want to gather thoughts,
> particularly if this feature is even worth keeping. It's only use case
> would be for end users who prefer not to store their password on the
> filesystem. Obviously it can't be use for CI or much other purposes.
> Given that it's been broken for so long without complaints, I don't
> think the feature is commonly used. The individual who recently brought
> attention to this issue has moved to putting their pw in their
> build.json as well.
>
>
> Context links:
> Original prompt issue:
> https://github.com/apache/cordova-android/issues/1021
> Prompt fix PR: https://github.com/apache/cordova-android/pull/1022
> Tamper issue: https://github.com/apache/cordova-android/issues/1023
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
> For additional commands, e-mail: dev-h...@cordova.apache.org
>
>

Reply via email to