equitrac_utilities 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []