Git Product home page Git Product logo

wdmc's Introduction

wdmc

The missing command line interface for Western Digital MyCloud NAS local REST API.

Installation

Since wdmc is not published to rubygems.org yet, by now you have to build yourself as follows:

# clone git repository
$ git clone [email protected]:okleinschmidt/wdmc.git

# enter wdmc source directory
$ cd wdmc

# to install run
$ bundle exec rake install
wdmc 0.0.1 built to pkg/wdmc-0.0.1.gem.
wdmc (0.0.1) installed.

Configuration

Create YAML file in your $HOME: ~/.wdmc.yml

url: http://192.168.0.10
username: admin
password: super-secure-password
validate_cert: true | false | warn (optional, default: true)
api_net_nl_bug: true | false (optional, default: false)

The value of validate_cert is relevant only for HTTPS URLs:

  • If not specified or set to true, then an invalid certificate will cause the server connection to fail with an error message.
  • If set to false, then certificate validation will not be performed.
  • If set to warn, then an invalid certificate will cause a warning message to be emitted and for certificate validation to be deactivated for the remainder of the operation.

Set api_net_nl_bug to true to avoid crashes caused by newline characters in DNS server data in the API response from your server.

I gave admin permission to my user account:

$ wdmc user update <USER> -a

Usage

$ wdmc
Commands:
  wdmc acl             # Fileshare ACLs
  wdmc device          # Device commands
  wdmc help [COMMAND]  # Describe available commands or one specific command
  wdmc share           # Fileshare commands
  wdmc sysinfo         # Device information
  wdmc tm              # TimeMachine commands
  wdmc user            # User commands
  wdmc version         # Version information

# List available shares
$ wdmc share list
AVAILABLE SHARES
 - Public
 - TimeMachineBackup

Development

After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/okleinschmidt/wdmc. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

wdmc's People

Contributors

okleinschmidt avatar tdilauro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

wdmc's Issues

Tags and RubyGems releases

Hi,

Great work on the under-documented API.
I'm working on a pet project - provisioning Kubernetes Persistent Volumes on my WD NAS - and I find your gem pretty useful.

I noticed that versions 0.0.1 and 0.0.2 are not tagged and not pushed to RubyGems.
It makes difficult to release my work as a gem depending on yours.

Could you please release the latest version?
Alternatively I can do that, rendering me as the owner of the release while keeping you as the author.

All the best,
Mate

Test support not working

@tdilauro Reverted your last changes. For me test-support throws errors.

$ bundle exec rspec

An error occurred while loading ./spec/client_spec.rb.
Failure/Error: hash_w_symbol_keys(['get_acl', share_w_acl])

NameError:
  undefined local variable or method `share_w_acl' for #<Class:0x00007f8142092868>
# ./spec/client_spec.rb:75:in `block (3 levels) in <top (required)>'
# ./spec/client_spec.rb:73:in `block (2 levels) in <top (required)>'
# ./spec/client_spec.rb:60:in `block in <top (required)>'
# ./spec/client_spec.rb:4:in `<top (required)>'


Finished in 0.00031 seconds (files took 0.4797 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

maintainability: mix of string and symbol hash keys

The Client class serves a number of other classes, some of which expect symbols and others of which expect strings as keys for the hashes returned by Client's methods. As a result, Client can not do its work in a consistent manner.

Feature request: install apkg

I'm having some issues when uploading an apkg binary manually to /shares/Volume_1/.systemfile/upload and installing it with the upload_apkg command on the NAS.
It works well via the web interface though.
I want to install apkgs to a target my cloud host as part of the integration tests for wdpksrc.

Maybe this client could help out?

WD NAS returns invalid JSON

Nota bene: This is not a problem with the code, but with the server with which it interacts.

My WD PR4100 NAS returns invalid JSON in response to this method in the Client class. The response includes an unescaped newline (\n), resulting in JSON which cannot be parsed.

def network
      response = get("#{@config['url']}/api/2.1/rest/network_configuration", {accept: :json, :cookies => cookies})
      JSON.parse(response, :symbolize_names => true)[:network_configuration]
    end

Running the response body through jq...

echo '''{"network_configuration":{"ifname":"bond0", "iftype":"wired", "proto":"dhcp_client", "ip":"192.168.1.33", "netmask":"255.255.255.0", "gateway":"192.168.1.1", "dns0":"192.168.1.1
", "dns1":"", "dns2":"", "gateway_mac_address":""}}''' | jq .

...produces the following:

parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 2, column 1

Running it through od...

echo '''{"network_configuration":{"ifname":"bond0", "iftype":"wired", "proto":"dhcp_client", "ip":"192.168.1.33", "netmask":"255.255.255.0", "gateway":"192.168.1.1", "dns0":"192.168.1.1
", "dns1":"", "dns2":"", "gateway_mac_address":""}}''' | od -t x1

...produces the following:

0000000  7b  22  6e  65  74  77  6f  72  6b  5f  63  6f  6e  66  69  67
          {   "   n   e   t   w   o   r   k   _   c   o   n   f   i   g
0000020  75  72  61  74  69  6f  6e  22  3a  7b  22  69  66  6e  61  6d
          u   r   a   t   i   o   n   "   :   {   "   i   f   n   a   m
0000040  65  22  3a  22  62  6f  6e  64  30  22  2c  20  22  69  66  74
          e   "   :   "   b   o   n   d   0   "   ,       "   i   f   t
0000060  79  70  65  22  3a  22  77  69  72  65  64  22  2c  20  22  70
          y   p   e   "   :   "   w   i   r   e   d   "   ,       "   p
0000100  72  6f  74  6f  22  3a  22  64  68  63  70  5f  63  6c  69  65
          r   o   t   o   "   :   "   d   h   c   p   _   c   l   i   e
0000120  6e  74  22  2c  20  22  69  70  22  3a  22  31  39  32  2e  31
          n   t   "   ,       "   i   p   "   :   "   1   9   2   .   1
0000140  36  38  2e  31  2e  33  33  22  2c  20  22  6e  65  74  6d  61
          6   8   .   1   .   3   3   "   ,       "   n   e   t   m   a
0000160  73  6b  22  3a  22  32  35  35  2e  32  35  35  2e  32  35  35
          s   k   "   :   "   2   5   5   .   2   5   5   .   2   5   5
0000200  2e  30  22  2c  20  22  67  61  74  65  77  61  79  22  3a  22
          .   0   "   ,       "   g   a   t   e   w   a   y   "   :   "
0000220  31  39  32  2e  31  36  38  2e  31  2e  31  22  2c  20  22  64
          1   9   2   .   1   6   8   .   1   .   1   "   ,       "   d
0000240  6e  73  30  22  3a  22  31  39  32  2e  31  36  38  2e  31  2e
          n   s   0   "   :   "   1   9   2   .   1   6   8   .   1   .
0000260  31  0a  22  2c  20  22  64  6e  73  31  22  3a  22  22  2c  20
          1  \n   "   ,       "   d   n   s   1   "   :   "   "   ,
0000300  22  64  6e  73  32  22  3a  22  22  2c  20  22  67  61  74  65
          "   d   n   s   2   "   :   "   "   ,       "   g   a   t   e
0000320  77  61  79  5f  6d  61  63  5f  61  64  64  72  65  73  73  22
          w   a   y   _   m   a   c   _   a   d   d   r   e   s   s   "
0000340  3a  22  22  7d  7d  0a
          :   "   "   }   }  \n

Would be interested to know if others have this problem, as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.