abiraj 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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/abiraj.rb +122 -0
  3. data/lib/securden/version.rb +6 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d96e91447aac465771ed31896d6f99e959f61cca70f4bce689a48b15410feef6
4
+ data.tar.gz: c3bbd736acae1d901bbe6a7185f57aabca7a454a57686a3f08607edf72a05fae
5
+ SHA512:
6
+ metadata.gz: c46a230e1a113a33e2103ca84a1bcb12782934b98f5968dc2ac826e8036ef020aaca4b7afc57f1cbf17463e7223ba81f3593dfaf4ec61a2407f7d80006e8562d
7
+ data.tar.gz: 23be80da0ad17c335482ea27fdb147f83fe19d3a3d4dd8815fffa830e618d67488df0088a4233b727c8f60954c592acda65e958da4ce987d3cff7272650b5d28
data/lib/abiraj.rb ADDED
@@ -0,0 +1,122 @@
1
+ require "net/http"
2
+ require "json"
3
+ require 'openssl'
4
+
5
+ module Abiraj
6
+ class Error < StandardError; end
7
+
8
+ def self.logger(message:, level: 'info')
9
+ level = 'warn' if level == 'error'
10
+ prefix = "[ABIRAJ] "
11
+ if defined?(Chef) && Chef.const_defined?(:Log)
12
+ case level.downcase
13
+ when "error"
14
+ Chef::Log.error(prefix + message)
15
+ when "debug"
16
+ Chef::Log.debug(prefix + message)
17
+ when "warn"
18
+ Chef::Log.warn(prefix + message)
19
+ else
20
+ Chef::Log.info(prefix + message)
21
+ end
22
+ end
23
+ end
24
+
25
+ class Account
26
+ def initialize(server_url:, authtoken:, org: nil, certificate: nil)
27
+ @init = false
28
+
29
+ # Validate inputs
30
+ if server_url.nil? || authtoken.nil? || server_url.strip.empty? || authtoken.strip.empty?
31
+ Abiraj.logger(message: "Server URL and authtoken are required to initialize Abiraj.", level: "error")
32
+ return
33
+ end
34
+
35
+ unless server_url.start_with?('http://', 'https://')
36
+ Abiraj.logger(message: "Invalid server URL. It must start with http:// or https://", level: "error")
37
+ return
38
+ end
39
+
40
+ # Load certificate if provided
41
+ # if server_url.start_with?('https://') && certificate
42
+ # begin
43
+ # cert_content = File.read(certificate)
44
+ # Abiraj.logger(message: "Loaded certificate content successfully.")
45
+ # @certificate = OpenSSL::X509::Certificate.new(cert_content)
46
+ # rescue StandardError => e
47
+ # Abiraj.logger(message: "Failed to read or parse certificate: #{e.message}", level: "error")
48
+ # return
49
+ # end
50
+ # end
51
+
52
+ @server_url = server_url.strip
53
+ @authtoken = authtoken.strip
54
+ @org = org&.strip
55
+ @certificate = certificate if certificate
56
+ @init = true
57
+ Abiraj.logger(message: "Abiraj initialized successfully.")
58
+ end
59
+
60
+ def get(account_id: nil, account_name: nil, account_title: nil)
61
+ return log_and_return_nil("Abiraj is not initialized.") unless @init
62
+
63
+ Abiraj.logger(message: "Fetching account data.")
64
+
65
+ # Prepare request parameters
66
+ params = {}
67
+ params['account_id'] = account_id.to_s if account_id
68
+ params['account_name'] = account_name unless account_name.to_s.strip.empty?
69
+ params['account_title'] = account_title unless account_title.to_s.strip.empty?
70
+
71
+ # Send GET request
72
+ account_data = get_request(params, "/api/get_account_details_dict")
73
+ if account_data
74
+ Abiraj.logger(message: "Account data fetched successfully.")
75
+ return account_data
76
+ else
77
+ log_and_return_nil("Unable to fetch account data.")
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def log_and_return_nil(message)
84
+ Abiraj.logger(message: message, level: "error")
85
+ nil
86
+ end
87
+
88
+ def get_request(params, endpoint)
89
+ Abiraj.logger(message: "Raising API request to Abiraj server.")
90
+
91
+ uri = URI(@server_url + endpoint)
92
+ uri.query = URI.encode_www_form(params) unless params.empty?
93
+
94
+ http = Net::HTTP.new(uri.host, uri.port)
95
+ http.use_ssl = uri.scheme == 'https'
96
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
97
+
98
+ if http.use_ssl? && @certificate
99
+ http.ca_file = @certificate
100
+ end
101
+
102
+ request = Net::HTTP::Get.new(uri)
103
+ request['authtoken'] = @authtoken
104
+ request['org'] = @org if @org
105
+
106
+ begin
107
+ response = http.request(request)
108
+ Abiraj.logger(message: "HTTP response code: #{response.code}", level: "debug")
109
+
110
+ if response.code.to_i == 200
111
+ JSON.parse(response.body)
112
+ else
113
+ log_and_return_nil("Unexpected response code #{response.code}: #{response.body}")
114
+ end
115
+ rescue JSON::ParserError => e
116
+ log_and_return_nil("Failed to parse JSON response: #{e.message}")
117
+ rescue StandardError => e
118
+ log_and_return_nil("HTTP request failed: #{e.message}")
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Abiraj
4
+ VERSION = "0.1.0"
5
+ end
6
+
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: abiraj
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Abiraj
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-12-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This plugin sends a GET request to an API to fetch account data (passwords,
14
+ etc.) based on the account ID, name, and title.
15
+ email:
16
+ - contact@abiraj.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/abiraj.rb
22
+ - lib/securden/version.rb
23
+ homepage:
24
+ licenses: []
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.3
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Abiraj Chef plugin tool to extend and securely manage secrets and credential.
45
+ test_files: []