require 'net/http' require 'json' module Adminix::Setup module Services def self.create_session(payload) uri = URI.parse("#{config.host}/v1/profile/session") request = Net::HTTP::Post.new(uri) request['Content-Type'] = 'application/json' request.body = { session: { connect_type: 'email', connect_data: { email: payload[:email], password: payload[:password] } } }.to_json opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) data['success'] == true ? [:ok, data['result']['token']] : [:error, { email: ['Invalid credentials'] }] end def self.create_user(payload) uri = URI.parse("#{config.host}/v1/profile") request = Net::HTTP::Post.new(uri) request['Content-Type'] = 'application/json' request.body = { profile: { connect_type: 'email', connect_data: { email: payload[:email], first_name: payload[:first_name], last_name: payload[:last_name], password: payload[:password], locale: 'en' } } }.to_json opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) data['success'] == true ? [:ok, data['result']['token']] : [:error, data['result']] end def self.create_service(access_token, payload) uri = URI.parse("#{config.host}/v1/services") request = Net::HTTP::Post.new(uri) request['Content-Type'] = 'application/json' request['X-Auth-Token'] = access_token request.body = { service: { name: payload[:name] } }.to_json opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) data['success'] == true ? [:ok, data['result']] : [:error, data['result']] end def self.get_existing_services(access_token) uri = URI.parse("#{config.host}/v1/services") request = Net::HTTP::Get.new(uri) request["X-Auth-Token"] = access_token opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) rescue {} data['success'] == true ? [:ok, data['result']] : [:error, []] end def self.get_secret_key(access_token) uri = URI.parse("#{config.host}/v1/profile/session") request = Net::HTTP::Get.new(uri) request["X-Auth-Token"] = access_token opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) rescue {} data['result']['user']['secret_key'] rescue nil end def self.verify_service_id(access_token, service_id) uri = URI.parse("#{config.host}/v1/services/#{service_id}") request = Net::HTTP::Get.new(uri) request["X-Auth-Token"] = access_token opts = { use_ssl: uri.scheme == 'https' } response = Net::HTTP.start(uri.hostname, uri.port, opts) do |http| http.request(request) end data = JSON.parse(response.body) rescue {} data['success'] == true end private def self.config Adminix::Config.instance end def self.import_settings(secret_key, service_id) open("#{ENV['HOME']}/.adminix", 'w') do |f| f.puts({ secret_key: secret_key, service_id: service_id }.to_json) end true end end end