equitrac_utilities 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 18c56d5baffe1fc3d4fed4283391c508869b24faaa73ad76406211ffc906a166
4
+ data.tar.gz: f36337e3cecaf50ec47dee44180a69ae5df8cfb51bb233912865c9192af30542
5
+ SHA512:
6
+ metadata.gz: 3545e140782698895a8671b1c6f343bc3a7a6335e63ced8f80e23be8145df845710c9e063b94feafc9fb23be325462654e1a16626d8383825af91ed79febe167
7
+ data.tar.gz: b04e946ccdf95b44a6f182519d5bc7ef5fe740e4148b92ba1e546ff9b3aadbe801aa06a4884c6ec7509e5468f90c0de2c759dcf3a9b0c9f6ac568693c919415b
@@ -0,0 +1,6 @@
1
+ require "equitrac_utilities/version"
2
+ require "equitrac_utilities/connection"
3
+
4
+ module EquitracUtilities
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,93 @@
1
+ require 'net/ssh'
2
+ require 'timeout'
3
+ require 'equitrac_utilities/user_actions'
4
+
5
+ module EquitracUtilities
6
+
7
+ # The EquitracUtilities, makes it east to work with Equitac EQCmd.exe commands
8
+ # @since 0.1.0
9
+ #
10
+ # @note You should use environment variables to initialize your server.
11
+ class Connection
12
+
13
+ attr_reader :hostname, :username, :servicename, :eqcmd_path, :ssh_options
14
+
15
+ include EquitracUtilities::UserActions
16
+
17
+ # Make connection to the Equitrac server
18
+ # @note Hostname, Username and Servicename are required
19
+ # @param params [Hash] The server configuration parameters. Options available `:hostname`, `:username`, `:servicename`, `:eqcmd_path`, `:ssh_options`
20
+ def initialize(params={})
21
+ config = defaults.merge(params)
22
+ @hostname = config[:hostname]
23
+ @username = config[:username]
24
+ @servicename = config[:servicename]
25
+ @eqcmd_path = config[:eqcmd_path]
26
+ @ssh_options = config[:ssh_options]
27
+
28
+ raise ArgumentError, 'hostname missing' if hostname.nil? or hostname.empty?
29
+ raise ArgumentError, 'username missing' if username.nil? or username.empty?
30
+ raise ArgumentError, 'servicename missing' if servicename.nil? or servicename.empty?
31
+ end
32
+
33
+ # @note Run a command against the Equitrac server
34
+ #
35
+ # @param command [Symbol] choose command to perform these include: :user_query, :user_exists? (t/f), :user_add, :user_delete, :user_lock, :user_unlock, :user_modify
36
+ # @param attributes [Hash] attributes needed to perform command
37
+ # @return [String] the restult from the ssh command
38
+ def run(command:, attributes:)
39
+ unless attributes[:user_id].nil? or attributes[:user_id].empty? or attributes[:user_id].eql? ''
40
+ # Prep command
41
+ action = send(command, attributes)
42
+ ssh_cmd = build_full_command(action)
43
+ # Execute command
44
+ answer = send_eqcmd(ssh_cmd)
45
+ # Post processing answer
46
+ return post_processing(command, answer)
47
+ end
48
+ return "user_id missing -- #{attributes}"
49
+ end
50
+
51
+ private
52
+
53
+ def build_full_command(action)
54
+ # sample:
55
+ "#{eqcmd_path} -s#{servicename} #{action}"
56
+ end
57
+
58
+ def send_eqcmd(command)
59
+ output = nil
60
+ # quicker timeout config - https://gist.github.com/makaroni4/8792775
61
+ # Timeout::timeout(10) do
62
+ Net::SSH.start(hostname, username, ssh_options) do |ssh|
63
+ # Capture all stderr and stdout output from a remote process
64
+ output = ssh.exec!(command)
65
+ end
66
+ # end
67
+ # EQ56 returns unicode jibberish & looks like
68
+ # "C\u0000a\u0000n\u0000'\u0000t\u0000 \u0000f\u0000i\u0000n\u0000d"
69
+ convert_eq56_unicode_to_ascii(output)
70
+ end
71
+
72
+ # Clean return from ssh execution
73
+ #
74
+ # @param string [String] the string that need to be clean
75
+ # @return [String] the clean string
76
+ def convert_eq56_unicode_to_ascii(string)
77
+ string.gsub("\u0000",'').gsub(/\\/,'')
78
+ end
79
+
80
+ def post_processing(command, answer)
81
+ return process_user_exists?(answer) if command.eql? :user_exists?
82
+ answer
83
+ end
84
+
85
+ def defaults
86
+ { hostname: ENV['EQ_HOSTNAME'],
87
+ username: ENV['EQ_USERNAME'],
88
+ servicename: ENV['EQ_SERVICENAME'],
89
+ eqcmd_path: ( ENV['EQ_EQCMD_PATH'] || 'C:\Program Files\Equitrac\Express\Tools\EQCmd.exe' ),
90
+ ssh_options: (eval(ENV['EQ_SSH_OPTIONS'].to_s) || {}) }
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,93 @@
1
+ module EquitracUtilities
2
+
3
+ # @note Equitrac Administration Guide - https://download.equitrac.com/271828/EE5.6/Docs/Administration_Guide.pdf
4
+ module UserActions
5
+
6
+ # Get Equitrac User Info
7
+ #
8
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
9
+ # @return [String] Formatted for EQCmd.exe command execution
10
+ def user_query(attr)
11
+ "query ur #{attr[:user_id]}"
12
+ end
13
+
14
+ # Query to test if user exists in Equitrac System
15
+ # @note This required post-answer_post_processing
16
+ #
17
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
18
+ # @return [String] Formatted for EQCmd.exe command execution
19
+ def user_exists?(attr)
20
+ user_query(attr)
21
+ end
22
+
23
+ # Process to test if user exists in Equitrac System
24
+ #
25
+ # @param test [Hash] this attribute MUST include: { user_id: "userid" }
26
+ # @return [Boolean] True or False depending on if the user was found or not
27
+ def process_user_exists?(test)
28
+ return false if test.include?("Can't find")
29
+ return true if test.include?("User_ID")
30
+ raise
31
+ end
32
+
33
+ # Add a user to the system
34
+ # @note user_id, initial_balance, user_name, department_name, and primary_pin required
35
+ #
36
+ # @param attributes [Hash] this attribute MUST include { user_id: "userid", init_bal: 0, username: "Test USER", dept_name: "Testdept", primary_pin: "99999"}
37
+ # @return [String] Formatted for EQCmd.exe command execution
38
+ def user_add(attributes)
39
+ defaults = { min_bal: 0.0, secondary_pin: '""',quota: 0,
40
+ alternate_pin: '""', home_server: '""', locked: 0,
41
+ location: '""', additional_info: 0, home_folder: '""'}
42
+ attr = defaults.merge( attributes )
43
+
44
+ "add ur #{attr[:user_id]} #{attr[:init_bal]} \"#{attr[:user_name]}\" " +
45
+ "#{attr[:min_bal]} #{attr[:email]} #{attr[:dept_name]}" +
46
+ " #{attr[:primary_pin]} #{attr[:secondary_pin]} #{attr[:quota]}" +
47
+ " #{attr[:alternate_pin]} #{attr[:home_server]} #{attr[:locked]}" +
48
+ " #{attr[:location]} #{attr[:additional_info]} #{attr[:home_folder]}"
49
+ end
50
+
51
+ # Process to delete a user from the Equitrac System
52
+ #
53
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
54
+ # @return [String] Formatted for EQCmd.exe command execution
55
+ def user_delete(attr)
56
+ "delete ur #{attr[:user_id]}"
57
+ end
58
+
59
+ # Process to lock a user in the Equitrac System
60
+ #
61
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
62
+ # @return [String] Formatted for EQCmd.exe command execution
63
+ def user_lock(attr)
64
+ "lock ur #{attr[:user_id]}"
65
+ end
66
+
67
+ # Process to unlock a user in the Equitrac System
68
+ #
69
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
70
+ # @return [String] Formatted for EQCmd.exe command execution
71
+ def user_unlock(attr)
72
+ "unlock ur #{attr[:user_id]}"
73
+ end
74
+
75
+ # Process to lock a user in the Equitrac System
76
+ #
77
+ # @param attr [Hash] this attribute MUST include: { user_id: "userid" }
78
+ # @return [String] Formatted for EQCmd.exe command execution
79
+ def user_modify(attributes)
80
+ defaults = {user_name: "!", min_bal: "!",
81
+ email: "!", dept_name: "!", pimary_pin: "!",
82
+ secondary_pin: "!", quota: "!", alternate_pin: "!",
83
+ home_server: "!", locked: "!", location: "!",
84
+ default_bc: "!", additional_info: "!", home_folder: "!"}
85
+ attr = defaults.merge( attributes )
86
+ "modify ur #{attr[:user_id]} \"#{attr[:user_name]}\" #{attr[:min_bal]}" +
87
+ " #{attr[:email]} #{attr[:dept_name]} #{attr[:primary_pin]}" +
88
+ " #{attr[:secondary_pin]} #{attr[:quota]} #{attr[:alternate_pin]}" +
89
+ " #{attr[:home_server]} #{attr[:locked]} #{attr[:location]}" +
90
+ " #{attr[:default_bc]} #{attr[:additional_info]} #{attr[:home_folder]}"
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,5 @@
1
+ module EquitracUtilities
2
+ module Version
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: equitrac_utilities
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Bill Tihen
8
+ - Lee Weisbecker
9
+ - Elliott Herbert
10
+ autorequire:
11
+ bindir: exe
12
+ cert_chain: []
13
+ date: 2018-05-25 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: net-ssh
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '4.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '4.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: bundler
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.16'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.16'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rake
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '10.0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '10.0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rspec
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '3.0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '3.0'
71
+ description: uses ssh to connect to an Equitrac server and send user commands
72
+ email:
73
+ - btihen@gmail.com
74
+ - leeweisbecker@gmail.com
75
+ executables: []
76
+ extensions: []
77
+ extra_rdoc_files: []
78
+ files:
79
+ - lib/equitrac_utilities.rb
80
+ - lib/equitrac_utilities/connection.rb
81
+ - lib/equitrac_utilities/user_actions.rb
82
+ - lib/equitrac_utilities/version.rb
83
+ homepage: https://github.com/LAS-IT/equitrac_utilities
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.7.6
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Simple ruby wrapper for equitrac user management
107
+ test_files: []