Commit Graph

39 Commits

Author SHA1 Message Date
Chris Beams
f5803492bd
Add comment explaining exception message mangling 2020-04-26 21:27:24 +02:00
Chris Beams
f4b4f5ad89
Update cli/test.sh instructions
Don't instruct the user to create a fresh data directory every time, as
this takes quite a bit longer to initialize the wallet than running
against the same data directory repeatedly. Just be clear that the
requirement is an unencrypted wallet with 0 BTC balance.
2020-04-26 21:10:25 +02:00
Chris Beams
5fa7939ec4
Set --password as a required option in JOpt parser 2020-04-26 21:05:22 +02:00
Chris Beams
822e6813f8
Touch up test descriptions and parameter naming 2020-04-26 21:04:06 +02:00
Chris Beams
a3f9faf7ab
Move cli-test.sh => cli/test.sh
- Ensure script runs from root directory regardless of where it is
   invoked from

 - Touch up documentation and whitespace
2020-04-26 20:46:52 +02:00
Chris Beams
b7fda8de5e
Declare channel outside try/catch
No StatusRuntimeException can be thrown from this code, so it is not
necessary to include in the try block.
2020-04-26 19:38:06 +02:00
Chris Beams
0a2aac00d3
Shutdown channel using a JVM shutdown hook
Versus needing to manage calling custom shutdown method in all the right
places.
2020-04-26 19:35:48 +02:00
Chris Beams
e10e29a211
Handle OptionException immediately 2020-04-26 19:32:14 +02:00
ghubstan
dee5e4cf7e
Revert 16c2efc
No need to strip quotes from password.  The problem was a bug
in my expect/tcl script's quote escape syntax.
2020-04-26 10:29:01 -03:00
ghubstan
56f2923ade
Remove redundant text from console err msg
The client was displaying
	Error: UNAUTHENTICATED: incorrect 'password' rpc header value
from the StatusRuntimeException message.

Strip "UNAUTHENTICATED: " from the exception message string before
printing it.
2020-04-25 18:16:23 -03:00
ghubstan
16c2efc8e1
Allow double-quoted multiword apiPassword
Strip double quotes from :cli --password arg before it is passed
to server.  Otherwise, a correct "password" will fail authentication.
2020-04-25 17:52:54 -03:00
Chris Beams
d923d07781
Fix typo in help output 2020-04-25 13:34:32 +02:00
Chris Beams
653856f79b
Refactor 'auth*' naming to 'password'
To increase simplicity and make the implementation more
intention-revealing.
2020-04-25 13:28:10 +02:00
Chris Beams
42e9bb1433
Refine help output 2020-04-25 11:31:19 +02:00
Chris Beams
c1931d2fb2
Use 'method' vs 'command' naming 2020-04-25 11:27:19 +02:00
Chris Beams
7bf854c86e
Improve error handling
Fail fast if the specified command is unknown
2020-04-25 11:22:01 +02:00
Chris Beams
c6e5670fbd
Print nested exception error message on connect failure 2020-04-25 10:42:53 +02:00
Chris Beams
b67ad6cd74
Print help text when no command is specified 2020-04-25 10:25:54 +02:00
Chris Beams
423b2ad4ae
Handle OptionException gracefully
When e.g. a given option is not recognized, print a clean error message
and exit 1 as opposed to printing a stack trace.
2020-04-25 10:10:27 +02:00
Chris Beams
0b338bbbea
Rename/repackage bisq.cli.{app.Bisq=>CliMain} 2020-04-25 09:59:22 +02:00
Chris Beams
d19581a089
Reduce AuthHeaderCallCredentials visibility to package-private 2020-04-25 09:55:32 +02:00
Chris Beams
e84123c20a
Refactor auth infrastructure naming 2020-04-25 09:52:50 +02:00
Chris Beams
3fe7848c4e
Use var declarations where appropriate 2020-04-25 08:17:22 +02:00
Chris Beams
04defcb66d
Update comments and console output 2020-04-25 08:17:19 +02:00
Chris Beams
31aed4b082
Simplify implementation to a single main class 2020-04-25 08:16:38 +02:00
Chris Beams
1a133f4b67
Use a single auth token vs username:password
There is actually no use case for both username and password forming the
authentication token. This change simplifies the arrangement such that a
single token is passed.

--rpcUser and --rpcPassword are no longer used and are replaced by
--apiToken on both cli and daemon sides.
2020-04-23 11:32:19 +02:00
Chris Beams
ca0658229b
Rename AuthenticationInterceptor => TokenAuthInterceptor 2020-04-23 11:21:52 +02:00
Chris Beams
24c245c2ea
Polish BisqCallCredentials style
See https://github.com/bisq-network/style/issues/12
2020-04-23 11:21:52 +02:00
ghubstan
fe9e57babb
Implement simple cleartext gRPC authentication
* Renamed CliCommand to RpcCommand, differentiating it from cmd
   string token(s)

 * Added new CliConfig, based on :common Config

 * Injected Config into CoreApi to make bisq.properties and cmd line
   args available to server

 * Added cleartext username:password BisqCallCredentials to :cli, and
   an AuthenticationInterceptor to :core (server)

 * Moved :daemon resources folder to expected location under src/main

 * Duplicated CompositeOptionSet, ConfigException and BisqException
   in :cli because they are not visible from :common.  (TODO refactor?)
   CompositeOptionSet will be used to let command line parameters
   override params set in config file.

 * Removed outdated references to :cli in a couple of comments in
   :common Config

 * gRPC parameters & command names are lowercase to mimic bitcoind/rpc

TBD

 * Decide what rpc auth param names to use, to differentiate them from
   bitcoind rpc user/passord param names
2020-04-22 18:16:01 -03:00
ghubstan
aba595b8e8
Implement requested changes in PR #4097
Change member name OptionParser cmdParser -> parser.
Change server listening port to 9998, client port to 9998.
Change constructor argument from String[] param -> args.
Print the result only, w/out exec time.
Handle help command & print that to stdout;  print help
triggered by user error to stderr.
Use explicit system SUCCESS/FAIL codes in System.exit(0 || 1).
2020-03-30 12:53:45 -03:00
ghubstan
94ee49c5af
Remove read stdin loop
Replaced the Scanner input read loop with upgraded joptsimple
dependency. Cli now takes a single, non-option program argument, runs
it and exits.  Also removed the "stop client" command because there is
no input loop, but shutdown() is called for orderly channel shudown
before the jvm terminates.  Also changed cmd syntax from camel case
to lowercase, mimicking bitcoin-cli.

Configured logback to supress all debug & info level netty output, and
bypassed logback to print results to System.out.
2020-03-27 12:27:36 -03:00
Chris Beams
ccde089af3
Rename :protodefintion subproject to :proto
This is done primarily for concision. This change also repackages
bisq.grpc => bisq.proto.grpc in anticipation of repackaging the
definitions in pb.proto from 'protobuf' to 'bisq.proto'. There should
not be any compatibility issues with doing this, but it's out of scope
here. When complete, the relationship between bisq.proto.grpc and
bisq.proto will be more intuitively clear, i.e. that bisq.proto.grpc has
certain dependencies on bisq.proto classes, but not the other way
around.
2020-03-26 17:37:37 +01:00
Chris Beams
b8db1cdf78
Organize grpc/protobuf imports properly 2020-03-26 17:10:59 +01:00
ghubstan
aed3453142
Move command & core proto defs to new subproject
Protobuf definition files were moved from common and core to a new
protodefinition subproject.

The two main reasons for doing this are to speed up builds by not
having to regenerate common and core protobuf classes
every time a change is made in those subprojects, and to remove
the grpc cli's direct dependency on core, and the transitive dependency
on common.

In order to accomplish this, cli's BisqCliMain was stripped of
its dependencies on common and core.  Cli can only get the version
and balance now.

gRPC stub boilerplate was moved from BisqCliMain to a CliCommand
class to avoid some of the bloat that is going to happen as the
read-response loop supports more rpc commands.
2020-03-26 10:14:33 -03:00
Chris Beams
d77ff101fb
Reflect higher security deposit in placeOffer RPC comment
Per review comment at
https://github.com/bisq-network/bisq/pull/3888#discussion_r368481607
2020-01-20 12:58:13 +01:00
Chris Beams
1e8633b03b
Organize io.grpc imports correctly
And remove entry for the no longer used io.bisq.generated package.
2020-01-20 12:16:57 +01:00
Chris Beams
aff760514b
Sever dependency from :desktop => :grpc
The :grpc module will soon be renamed to :daemon. These two modules
represent two separate and equal modes of running bisq, either as a
desktop GUI or as a daemon. They are both applications, and one should
not depend on the other as it would be illogical and confusing to model
things that way. The reason for the current dependency from :desktop to
:grpc is because :grpc is the home of BisqGrpcServer. This change moves
this class up to :core, in a new bisq.core.grpc package, such that both
the :desktop and :daemon applications can pull it in cleanly.

The CoreApi 'facade' that BisqGrpcServer uses to abstract away bisq
internals has been moved from bisq.core to bisq.core.grpc as well and
for the same reasons detailed in 8b30c22d6.

This change also renames the Java package for generated grpc types from
bisq.grpc.protobuf to bisq.core.grpc (the same new package that
BisqGrpcServer and CoreApi now live in). Again, this is for reasons of
cohesion: BisqGrpcServer is the only user of these grpc-generated types,
and they should logically live in the same package (even if they
physically live in separate source dirs at the build level).
2020-01-20 12:12:09 +01:00
Chris Beams
07d98a3aba
Move bisq.{grpc.BisqGrpcClient=>cli.BisqCliMain}
This change replaces the previous "Hello, World!" :cli main stub with
the contents of the BisqGrpcClient as originally implemented in :grpc,
such that the following now works:

    $ gradle build
    $ ./bisq-daemon # in first terminal
    $ ./bisq-cli    # in second terminal
    getVersion      # user input to stdin
    1.2.3           # rpc response
    getBalance      # user input to stdin
    0.00            # rpc response
    ...

Or for a user experience closer to where things are headed:

    $ echo getVersion | ./bisq-cli
    1.2.3

Note that processing the above command is currently far too slow:

    $ time echo getVersion | ./bisq-cli
    1.2.3

    real    0m1.634s   # ouch
    user    0m1.746s
    sys     0m0.180s

Subsequent commits will work to bring this time down to a minimum.

Note: Includes the code quality changes originally made to
BisqGrpcClient in commit 7595387.
2020-01-20 12:07:55 +01:00
Chris Beams
29698fd58a
Introduce 'cli' subproject
This change stubs out the `bisq-cli` utility with a placeholder main
method, such that the following now works:

    $ gradle :cli:build
    $ ./bisq-cli
    Hello, World!
2020-01-20 12:07:55 +01:00