Skip to content

Commit

Permalink
Change the default port to 7054
Browse files Browse the repository at this point in the history
See https://jira.hyperledger.org/browse/FAB-1782
This changes the default listening fabric-ca port from 8888
to 7054 which is the same port as the old membership services.
This was unfortunately not as trivial as you would think because
the default port is buried in cfssl's cli/config.go file with no
way to change the flag set.  So I process the command line args
prior to calling into cfssl's code to see if a "-port" option
was specified.  If it wasn't, then I add "-port 7054" to the
command line, so to cfssl it looks like we always pass in a "-port"
option.

The GetCommandLineOptValue func in util/args.go may also be used
to remove the "-config" option for the cli client in a future change
set.

Change-Id: I6caca6ab9c36a0a11d2069796cbfc18e39969faa
Signed-off-by: Keith Smith <[email protected]>
  • Loading branch information
Keith Smith committed Jan 23, 2017
1 parent aa5fb82 commit a569df9
Show file tree
Hide file tree
Showing 8 changed files with 257 additions and 34 deletions.
2 changes: 2 additions & 0 deletions cli/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package client

import (
"github.com/cloudflare/cfssl/cli"
"github.com/hyperledger/fabric-ca/util"

_ "github.com/go-sql-driver/mysql" // import to support MySQL
_ "github.com/lib/pq" // import to support Postgres
Expand All @@ -26,6 +27,7 @@ import (

// Command are the client commands
func Command() error {
util.SetDefaultServerPort()
cmds := map[string]*cli.Command{
"register": RegisterCommand,
"enroll": EnrollCommand,
Expand Down
25 changes: 12 additions & 13 deletions cli/client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

"github.com/cloudflare/cfssl/cli"
"github.com/hyperledger/fabric-ca/cli/server"
"github.com/hyperledger/fabric-ca/util"
)

var serverStarted bool
Expand All @@ -39,7 +40,7 @@ const (

// TestNewClient tests constructing a client
func TestNewClient(t *testing.T) {
_, err := NewClient("https://127.0.0.1:8888")
_, err := NewClient(util.GetServerURL())
if err != nil {
t.Errorf("Failed to create a client: %s", err)
}
Expand All @@ -53,7 +54,7 @@ func TestEnrollCLI(t *testing.T) {

c := new(cli.Config)

args := []string{"admin", "adminpw", "https://localhost:8888"}
args := []string{"admin", "adminpw", util.GetServerURL()}

err := enrollMain(args, *c)
if err != nil {
Expand All @@ -65,7 +66,7 @@ func TestEnrollCLI(t *testing.T) {
func TestReenrollCLI(t *testing.T) {
c := new(cli.Config)

args := []string{"https://localhost:8888"}
args := []string{util.GetServerURL()}

err := reenrollMain(args, *c)
if err != nil {
Expand All @@ -78,7 +79,7 @@ func TestRegister(t *testing.T) {

c := new(cli.Config)

args := []string{"../../testdata/registerrequest.json", "https://localhost:8888"}
args := []string{"../../testdata/registerrequest.json", util.GetServerURL()}

err := registerMain(args, *c)
if err != nil {
Expand All @@ -102,7 +103,7 @@ func TestRegisterNotEnoughArgs(t *testing.T) {
func TestRegisterNoJSON(t *testing.T) {
c := new(cli.Config)

args := []string{"", "admin", "https://localhost:8888"}
args := []string{"", "admin", util.GetServerURL()}

err := registerMain(args, *c)
if err == nil {
Expand All @@ -114,8 +115,7 @@ func TestRegisterNoJSON(t *testing.T) {
func TestRegisterMissingRegistrar(t *testing.T) {
c := new(cli.Config)

// os.Setenv("FABRIC_CA_HOME", "/tmp")
args := []string{"", "", "https://localhost:8888"}
args := []string{"", "", util.GetServerURL()}

err := registerMain(args, *c)
if err == nil {
Expand All @@ -128,7 +128,7 @@ func TestRevoke(t *testing.T) {

c := new(cli.Config)

args := []string{"https://localhost:8888", "admin"}
args := []string{util.GetServerURL(), "admin"}

err := revokeMain(args, *c)
if err != nil {
Expand All @@ -154,7 +154,7 @@ func TestEnrollCLIWithCSR(t *testing.T) {

c := new(cli.Config)

args := []string{"notadmin", "pass", "https://localhost:8888", "../../testdata/csr.json"}
args := []string{"notadmin", "pass", util.GetServerURL(), "../../testdata/csr.json"}

err := enrollMain(args, *c)
if err != nil {
Expand All @@ -167,7 +167,7 @@ func TestReenrollCLIWithCSR(t *testing.T) {

c := new(cli.Config)

args := []string{"https://localhost:8888", "../../testdata/csr.json"}
args := []string{util.GetServerURL(), "../../testdata/csr.json"}

err := reenrollMain(args, *c)
if err != nil {
Expand All @@ -179,7 +179,7 @@ func TestRevokeNoArg(t *testing.T) {

c := new(cli.Config)

args := []string{"https://localhost:8888"}
args := []string{util.GetServerURL()}

err := revokeMain(args, *c)
if err == nil {
Expand All @@ -191,14 +191,13 @@ func TestRevokeNotAdmin(t *testing.T) {

c := new(cli.Config)

args := []string{"https://localhost:8888", "admin"}
args := []string{util.GetServerURL(), "admin"}

err := revokeMain(args, *c)
if err == nil {
t.Error("TestRevokeNotAdmin should have failed but didn't")
}

// os.RemoveAll(clientPath)
}

func TestBogusCommand(t *testing.T) {
Expand Down
1 change: 1 addition & 0 deletions cli/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ const (

// Command defines the server-related commands and calls cli.Start to process args
func Command() error {
util.SetDefaultServerPort()
// The server commands
cmds := map[string]*cli.Command{
"init": InitServerCommand,
Expand Down
31 changes: 17 additions & 14 deletions cli/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,12 +212,11 @@ func TestRevoke(t *testing.T) {
}

func TestGetTCerts(t *testing.T) {
fcaServer := `{"serverURL":"https://localhost:8888"}`
c, err := lib.NewClient(fcaServer)
if err != nil {
t.Errorf("TestGetTCerts.NewClient failed: %s", err)
c := getClient(t)
if c == nil {
return
}

id, err := c.LoadMyIdentity()
if err != nil {
t.Errorf("TestGetTCerts.LoadMyIdentity failed: %s", err)
Expand Down Expand Up @@ -293,8 +292,10 @@ func TestEnroll(t *testing.T) {
}

func testUnregisteredUser(t *testing.T) {
fcaServer := `{"serverURL":"https://localhost:8888"}`
c, _ := lib.NewClient(fcaServer)
c := getClient(t)
if c == nil {
return
}

req := &api.EnrollmentRequest{
Name: "Unregistered",
Expand All @@ -309,8 +310,10 @@ func testUnregisteredUser(t *testing.T) {
}

func testIncorrectToken(t *testing.T) {
fcaServer := `{"serverURL":"https://localhost:8888"}`
c, _ := lib.NewClient(fcaServer)
c := getClient(t)
if c == nil {
return
}

req := &api.EnrollmentRequest{
Name: "notadmin",
Expand All @@ -325,8 +328,7 @@ func testIncorrectToken(t *testing.T) {
}

func testEnrollingUser(t *testing.T) {
fcaServer := `{"serverURL":"https://localhost:8888"}`
c, _ := lib.NewClient(fcaServer)
c, _ := lib.NewClient("")

req := &api.EnrollmentRequest{
Name: "testUser2",
Expand Down Expand Up @@ -361,8 +363,10 @@ func TestRevokeCertificatesByID(t *testing.T) {

func TestExpiration(t *testing.T) {

fcaServer := `{"serverURL":"https://localhost:8888"}`
c, _ := lib.NewClient(fcaServer)
c := getClient(t)
if c == nil {
return
}

// Enroll this user using the "expiry" profile which is configured
// to expire after 1 second
Expand Down Expand Up @@ -459,8 +463,7 @@ func testWithoutAuthHdr(c *lib.Client, t *testing.T) {
}

func getClient(t *testing.T) *lib.Client {
fcaServer := `{"serverURL":"https://localhost:8888"}`
c, err := lib.NewClient(fcaServer)
c, err := lib.NewClient("")
if err != nil {
t.Fatalf("TestMisc.NewClient failed: %s", err)
return nil
Expand Down
10 changes: 4 additions & 6 deletions lib/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,14 @@ import (
)

const (
// defaultServerPort is the default CFSSL listening port
defaultServerPort = "8888"
clientConfigFile = "client-config.json"
clientConfigFile = "client-config.json"
)

// NewClient is the constructor for the fabric-ca client API
func NewClient(config string) (*Client, error) {
c := new(Client)
// Set defaults
c.ServerURL = "http://localhost:8888"
c.ServerURL = util.GetServerURL()
c.HomeDir = util.GetDefaultHomeDir()
if config != "" {
// Override any defaults
Expand Down Expand Up @@ -350,7 +348,7 @@ func normalizeURL(addr string) (*url.URL, error) {
u.Host = net.JoinHostPort(u.Scheme, u.Opaque)
u.Opaque = ""
} else if u.Path != "" && !strings.Contains(u.Path, ":") {
u.Host = net.JoinHostPort(u.Path, defaultServerPort)
u.Host = net.JoinHostPort(u.Path, util.GetServerPort())
u.Path = ""
} else if u.Scheme == "" {
u.Host = u.Path
Expand All @@ -361,7 +359,7 @@ func normalizeURL(addr string) (*url.URL, error) {
}
_, port, err := net.SplitHostPort(u.Host)
if err != nil {
_, port, err = net.SplitHostPort(u.Host + ":" + defaultServerPort)
_, port, err = net.SplitHostPort(u.Host + ":" + util.GetServerPort())
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion lib/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
"github.com/cloudflare/cfssl/log"
"github.com/hyperledger/fabric-ca/api"
"github.com/hyperledger/fabric-ca/cli/server"
"github.com/hyperledger/fabric-ca/util"
)

const (
Expand Down Expand Up @@ -219,7 +220,7 @@ func TestSendBadPost(t *testing.T) {
}

func getClient() *Client {
fcaServer := `{"serverURL":"https://localhost:8888"}`
fcaServer := fmt.Sprintf(`{"serverURL": "%s"}`, util.GetServerURL())
c, err := NewClient(fcaServer)
if err != nil {
log.Errorf("getClient failed: %s", err)
Expand Down
92 changes: 92 additions & 0 deletions util/args.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
Copyright IBM Corp. 2017 All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package util

import (
"fmt"
"os"
)

const (
defaultServerProtocol = "https"
defaultServerAddr = "localhost"
defaultServerPort = "7054"
)

// GetCommandLineOptValue searches the command line arguments for the
// specified option and returns the following value if found; otherwise
// it returns "". If **remove** is true and it is found, the option
// and its value are removed from os.Args.
// For example, if command line is:
// fabric-ca client enroll -config myconfig.json
// GetCommandLineOptValue("-config",true) returns "myconfig.json"
// and changes os.Args to
// fabric-ca client enroll
func GetCommandLineOptValue(optName string, remove bool) string {
for i := 0; i < len(os.Args)-1; i++ {
if os.Args[i] == optName {
val := os.Args[i+1]
if remove {
// Splice out the option and its value
os.Args = append(os.Args[:i], os.Args[i+2:]...)
}
return val
}
}
return ""
}

// GetServerURL returns the server's URL
func GetServerURL() string {
return fmt.Sprintf("%s://%s:%s", GetServerProtocol(), GetServerAddr(), GetServerPort())
}

// GetServerProtocol returns the server's protocol
func GetServerProtocol() string {
protocol := GetCommandLineOptValue("-protocol", false)
if protocol != "" {
return protocol
}
return defaultServerProtocol
}

// GetServerAddr returns the server's address
func GetServerAddr() string {
addr := GetCommandLineOptValue("-address", false)
if addr != "" {
return addr
}
return defaultServerAddr
}

// GetServerPort returns the server's listening port
func GetServerPort() string {
port := GetCommandLineOptValue("-port", false)
if port != "" {
return port
}
return defaultServerPort
}

// SetDefaultServerPort overrides the default CFSSL server port
// by adding the "-port" option to the command line if it was not
// already present.
func SetDefaultServerPort() {
if len(os.Args) > 2 && GetCommandLineOptValue("-port", false) == "" {
os.Args = append(os.Args, "-port", defaultServerPort)
}
}
Loading

0 comments on commit a569df9

Please sign in to comment.