Class: GAuthify

Inherits:
Object
  • Object
show all
Defined in:
lib/gauthify.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key) ⇒ GAuthify

Returns a new instance of GAuthify.



58
59
60
61
62
63
64
65
# File 'lib/gauthify.rb', line 58

def initialize(api_key)
    @access_points = [
      'https://api.gauthify.com/v1/',
      'https://backup.gauthify.com/v1/'
    ]
    @headers = {:authorization => api_key, :user_agent => 'GAuthify/v1.00 Ruby/1.01'}

end

Instance Attribute Details

#access_pointsObject

Returns the value of attribute access_points.



56
57
58
# File 'lib/gauthify.rb', line 56

def access_points
  @access_points
end

#headersObject

Returns the value of attribute headers.



56
57
58
# File 'lib/gauthify.rb', line 56

def headers
  @headers
end

Instance Method Details

#check_auth(unique_id, auth_code, safe_mode = false) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/gauthify.rb', line 147

def check_auth(unique_id, auth_code, safe_mode = false)
    <<-DOC
    Checks OTP returns True/False depending on OTP correctness.
    DOC
    begin
        response = get_user(unique_id, auth_code)
        if not response['provided_auth']
            raise ParameterError('auth_code not detected. Check if params sent via get request.')
        end
        return response['authenticated']
    rescue GAuthifyError => e
        if safe_mode
            return True
        else
            raise e
        end
    end

end

#create_user(unique_id, display_name) ⇒ Object



111
112
113
114
115
116
117
118
119
# File 'lib/gauthify.rb', line 111

def create_user(unique_id, display_name)
    <<-DOC
Creates or upserts a new user with a new secret key
    DOC

    params = {'display_name' => display_name}
    url_addon = "users/#{unique_id}/"
    return requests_handler('post', url_addon, params=params)
end

#delete_user(unique_id) ⇒ Object



121
122
123
124
125
126
127
128
# File 'lib/gauthify.rb', line 121

def delete_user(unique_id)
    <<-DOC
  Deletes user given by unique_id
    DOC
    url_addon = "users/#{unique_id}/"
    return requests_handler('delete', url_addon)

end

#get_all_usersObject



130
131
132
133
134
135
# File 'lib/gauthify.rb', line 130

def get_all_users()
    <<-DOC
    Retrieves a list of all users
    DOC
    return requests_handler('get', 'users/')
end

#get_user(unique_id, auth_code = nil) ⇒ Object



138
139
140
141
142
143
144
145
# File 'lib/gauthify.rb', line 138

def get_user(unique_id, auth_code=nil)
    <<-DOC
    Returns a single user, checks the otp if provided
    DOC
    url_addon = "users/#{unique_id}/"
    url_addon << "check/#{auth_code}" if auth_code
    return requests_handler('get', url_addon)
end

#quick_test(test_email = nil, test_number = nil) ⇒ Object



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/gauthify.rb', line 185

def quick_test(test_email = nil, test_number = nil)
    <<-DOC
    Runs initial tests to make sure everything is working fine
    DOC
     = '[email protected]'
    puts("1) Testing Creating a User...")
    result = create_user(,
                         )
    puts result
    puts("Success ")
    puts("2) Retrieving Created User...")
    user = get_user()
    puts user
    puts("Success ")
    puts("3) Retrieving All Users...")
    result = get_all_users()
    puts result
    puts("Success ")
    puts("4) Bad Auth Code...")
    result = check_auth(, '112345')
    puts(result)
    if result
        raise Exception
    end
    puts("Success ")
    puts("5) Testing one time pass (OTP)....")
    result = check_auth(, user['otp'])
    puts(result)
    if not result
        raise Exception
    end
    if test_email
        puts("5A) Testing email to #{test_email}....")
        result = send_email(, test_email)
        puts(result)
    end
    if test_number
        puts("5B) Testing SMS to #{test_number}....")
        result = send_sms(, test_number)
        puts(result)
    end
    puts("Success ")
    puts("6) Detection of provided auth...")
    result = get_user(, 'test12')['provided_auth']
    if not result
        raise Exception
    end
    puts("7) Deleting Created User...")
    result = delete_user()
    puts(result)
    puts("Success ")


    puts("8) Testing backup server...")
    @access_points[0] = 'https://blah.gauthify.com/v1/'
    results = get_all_users()
    @access_points[0] = 'https://api.gauthify.com/v1/'
    puts(result)
    puts("Tests Look Good.")
end

#requests_handler(type, url_addon = '', params = {}) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/gauthify.rb', line 67

def requests_handler(type, url_addon='', params={})
    type = type.downcase
    for each in @access_points
        begin
            req_url = each + url_addon
            req = RestClient::Request.execute(:method => type, :url => req_url, :timeout => 1.5, :headers => @headers, :payload => params)
            status_code = req.code
            begin
                json_resp = JSON.parse(req.to_str)
            rescue
                json_resp = false
            end
            if not json_resp.is_a? Hash or (status_code > 400 and not [401, 402, 406, 404].include?(status_code))
                raise RestClient::Exception
            end
            break
        rescue Exception => e
            if e.is_a? RestClient::Exception
                case e.http_code
                    when 401
                        json_resp = JSON.parse(e.http_body)
                        raise ApiKeyError.new(json_resp['error_message'], status_code, json_resp['error_code'], e.http_body), json_resp['error_message']
                    when 402
                        json_resp = JSON.parse(e.http_body)
                        raise RateLimitError.new(json_resp['error_message'], status_code, json_resp['error_code'], e.http_body), json_resp['error_message']
                    when 406
                        json_resp = JSON.parse(e.http_body)
                        raise ParameterError.new(json_resp['error_message'], status_code, json_resp['error_code'], e.http_body), json_resp['error_message']
                    when 404
                        json_resp = JSON.parse(e.http_body)
                        raise NotFoundError.new(json_resp['error_message'], status_code, json_resp['error_code'], e.http_body), json_resp['error_message']
                end
            end
            if each == @access_points[-1]
                e_msg = "#{e.to_s}. Please contact [email protected] for help"
                raise ServerError.new(e_msg, 500, '500', ''), e_msg
            end
            next
        end
    end
    return json_resp['data']
end

#send_email(unique_id, email) ⇒ Object



176
177
178
179
180
181
182
# File 'lib/gauthify.rb', line 176

def send_email(unique_id, email)
    <<-DOC
    Sends email message to phone number with the one time auth_code
    DOC
    url_addon = "users/#{unique_id}/email/#{email}"
    return requests_handler('get', url_addon)
end

#send_sms(unique_id, phone_number) ⇒ Object



168
169
170
171
172
173
174
# File 'lib/gauthify.rb', line 168

def send_sms(unique_id, phone_number)
    <<-DOC
    Sends text message to phone number with the one time auth_code
    DOC
    url_addon = "users/#{unique_id}/sms/#{phone_number}"
    return requests_handler('get', url_addon)
end