dragonchain/dragonchain-sdk-go

View on GitHub

Showing 18 of 18 total issues

File client.go has 779 lines of code (exceeds 500 allowed). Consider refactoring.
Open

// Copyright 2020 Dragonchain, Inc. or its affiliates. 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
Severity: Major
Found in client.go - About 1 day to fix

    Client has 33 methods (exceeds 20 allowed). Consider refactoring.
    Open

    type Client struct {
        creds      Authenticator
        apiBaseURL string
    
        httpClient httpClient
    Severity: Minor
    Found in client.go - About 4 hrs to fix

      Similar blocks of code found in 2 locations. Consider refactoring.
      Open

      func (client *Client) GetTransactionType(transactionType string) (*Response, error) {
          path := "/transaction-type"
          uri := fmt.Sprintf("%s%s/%s", client.apiBaseURL, path, transactionType)
      
          req, err := http.NewRequest("GET", uri, bytes.NewBuffer([]byte("")))
      Severity: Major
      Found in client.go and 1 other location - About 2 hrs to fix
      client.go on lines 337..355

      Duplicated Code

      Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

      Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

      When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

      Tuning

      This issue has a mass of 202.

      We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

      The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

      If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

      See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

      Refactorings

      Further Reading

      Similar blocks of code found in 2 locations. Consider refactoring.
      Open

      func (client *Client) GetBlock(blockID string) (*Response, error) {
          path := "/block"
          uri := fmt.Sprintf("%s%s/%s", client.apiBaseURL, path, blockID)
      
          req, err := http.NewRequest("GET", uri, bytes.NewBuffer([]byte("")))
      Severity: Major
      Found in client.go and 1 other location - About 2 hrs to fix
      client.go on lines 465..483

      Duplicated Code

      Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

      Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

      When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

      Tuning

      This issue has a mass of 202.

      We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

      The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

      If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

      See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

      Refactorings

      Further Reading

      Similar blocks of code found in 2 locations. Consider refactoring.
      Open

      func getAuthKey(dcID string) (string, error) {
          authKey := os.Getenv(EnvKeyName)
          if len(authKey) > 0 {
              return authKey, nil
          }
      Severity: Minor
      Found in credentials.go and 1 other location - About 55 mins to fix
      credentials.go on lines 156..173

      Duplicated Code

      Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

      Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

      When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

      Tuning

      This issue has a mass of 127.

      We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

      The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

      If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

      See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

      Refactorings

      Further Reading

      Similar blocks of code found in 2 locations. Consider refactoring.
      Open

      func getAuthKeyID(ID string) (string, error) {
          authKeyID := os.Getenv(EnvKeyIDName)
          if len(authKeyID) > 0 {
              return authKeyID, nil
          }
      Severity: Minor
      Found in credentials.go and 1 other location - About 55 mins to fix
      credentials.go on lines 137..154

      Duplicated Code

      Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

      Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

      When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

      Tuning

      This issue has a mass of 127.

      We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

      The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

      If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

      See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

      Refactorings

      Further Reading

      Function NewCredentials has 6 return statements (exceeds 4 allowed).
      Open

      func NewCredentials(dcID, authKey, authKeyID, algorithm string) (*Credentials, error) {
          var err error
          var hashFunc func() hash.Hash
      
          switch algorithm {
      Severity: Major
      Found in credentials.go - About 40 mins to fix

        Method Client.QuerySmartContracts has 6 return statements (exceeds 4 allowed).
        Open

        func (client *Client) QuerySmartContracts(query *Query) (*Response, error) {
            path := "/contract"
            uri := fmt.Sprintf("%s%s", client.apiBaseURL, path)
            req, err := http.NewRequest("GET", uri, bytes.NewBuffer([]byte("")))
            if err != nil {
        Severity: Major
        Found in client.go - About 40 mins to fix

          Method Client.CreateBitcoinTransaction has 6 return statements (exceeds 4 allowed).
          Open

          func (client *Client) CreateBitcoinTransaction(btcTransaction *BitcoinTransaction) (*Response, error) {
              if !BitcoinNetworks[btcTransaction.Network] {
                  return nil, fmt.Errorf("bitcoin transactions can only be created on supported networks: %+v", BitcoinNetworks)
              }
              uri := fmt.Sprintf("%s%s", client.apiBaseURL, "/public-blockchain-transaction")
          Severity: Major
          Found in client.go - About 40 mins to fix

            Method Client.CreateEthereumTransaction has 6 return statements (exceeds 4 allowed).
            Open

            func (client *Client) CreateEthereumTransaction(ethTransaction *EthereumTransaction) (*Response, error) {
                if !EthereumNetworks[ethTransaction.Network] {
                    return nil, fmt.Errorf("ethereum transactions can only be created on supported networks: %+v", EthereumNetworks)
                }
                uri := fmt.Sprintf("%s%s", client.apiBaseURL, "/public-blockchain-transaction")
            Severity: Major
            Found in client.go - About 40 mins to fix

              Method Client.CreateFactor has 5 return statements (exceeds 4 allowed).
              Open

              func (client *Client) CreateFactor(factor string) (_ *Response, err error) {
                  path := "/factor"
                  uri := fmt.Sprintf("%s%s", client.apiBaseURL, path)
                  var params Factor
                  params.Version = "1"
              Severity: Major
              Found in client.go - About 35 mins to fix

                Method Client.GetSmartContract has 5 return statements (exceeds 4 allowed).
                Open

                func (client *Client) GetSmartContract(smartContractID, transactionType string) (*Response, error) {
                    var err error
                    var uri string
                    if smartContractID == "" && transactionType == "" {
                        return nil, errors.New("invalid parameters: you must provide one of smartContractID or transactionType")
                Severity: Major
                Found in client.go - About 35 mins to fix

                  Method Client.GetVerifications has 5 return statements (exceeds 4 allowed).
                  Open

                  func (client *Client) GetVerifications(blockID string, level int) (*Response, error) {
                      path := "/verifications"
                      uri := fmt.Sprintf("%s%s/%s", client.apiBaseURL, path, blockID)
                  
                      req, err := http.NewRequest("GET", uri, bytes.NewBuffer([]byte("")))
                  Severity: Major
                  Found in client.go - About 35 mins to fix

                    Method Client.UpdateTransactionType has 5 return statements (exceeds 4 allowed).
                    Open

                    func (client *Client) UpdateTransactionType(transactionType string, customIndexes []CustomIndexStructure) (*Response, error) {
                        path := "/transaction-type"
                        uri := fmt.Sprintf("%s%s/%s", client.apiBaseURL, path, transactionType)
                        var params TransactionType
                        params.Version = "1"
                    Severity: Major
                    Found in client.go - About 35 mins to fix

                      Function getAuthKeyID has 5 return statements (exceeds 4 allowed).
                      Open

                      func getAuthKeyID(ID string) (string, error) {
                          authKeyID := os.Getenv(EnvKeyIDName)
                          if len(authKeyID) > 0 {
                              return authKeyID, nil
                          }
                      Severity: Major
                      Found in credentials.go - About 35 mins to fix

                        Method Client.CreateTransactionType has 5 return statements (exceeds 4 allowed).
                        Open

                        func (client *Client) CreateTransactionType(transactionType string, customIndexes []CustomIndexStructure) (_ *Response, err error) {
                            path := "/transaction-type"
                            uri := fmt.Sprintf("%s%s", client.apiBaseURL, path)
                            var params TransactionType
                            params.Version = "1"
                        Severity: Major
                        Found in client.go - About 35 mins to fix

                          Function GetCredentialConfigs has 5 return statements (exceeds 4 allowed).
                          Open

                          func GetCredentialConfigs() (*Configuration, error) {
                              if configs != nil {
                                  return configs, nil
                              }
                          
                          
                          Severity: Major
                          Found in configuration.go - About 35 mins to fix

                            Function getAuthKey has 5 return statements (exceeds 4 allowed).
                            Open

                            func getAuthKey(dcID string) (string, error) {
                                authKey := os.Getenv(EnvKeyName)
                                if len(authKey) > 0 {
                                    return authKey, nil
                                }
                            Severity: Major
                            Found in credentials.go - About 35 mins to fix
                              Severity
                              Category
                              Status
                              Source
                              Language