79 lines
2.3 KiB
Ruby
79 lines
2.3 KiB
Ruby
#encoding: utf-8
|
|
|
|
require 'uri'
|
|
require 'net/http'
|
|
require 'json'
|
|
|
|
module BotpopPlugins
|
|
module Coupons
|
|
|
|
COUPON_REGEXP = "[A-Fa-f0-9]{32}"
|
|
MATCH = lambda do |parent, plugin|
|
|
# parent.on :message, /coupon(.+)?: .+/ do |m| plugin.exec_coupon m end
|
|
parent.on :message, /.*#{COUPON_REGEXP}.*/ do |m| plugin.exec_coupon_somewhere m end
|
|
end
|
|
# HELP = ["coupon: [...]"]
|
|
HELP = []
|
|
CONFIG = Botpop::CONFIG['coupons'] || raise(MissingConfigurationZone, 'coupons')
|
|
ENABLED = CONFIG['enable'].nil? ? true : CONFIG['enable']
|
|
|
|
if ENABLED
|
|
SECRET_CONFIG = YAML.load_file('plugins/coupon_login.yml')['creditentials']
|
|
USER = SECRET_CONFIG['username']
|
|
PASS = SECRET_CONFIG['password']
|
|
ORGA = SECRET_CONFIG['organisation']
|
|
APIU = SECRET_CONFIG['api_coupon_url']
|
|
URL = URI(APIU)
|
|
end
|
|
|
|
def self.get_coupon m
|
|
coupon = m.params[1..-1].join(' ').gsub(/(coupon(.+)?:)/, '').split.first
|
|
coupon = coupon.gsub(/[^A-z0-9\.\-_]/, '') # secure a little
|
|
coupon
|
|
end
|
|
|
|
def self.get_coupons_somewhere m
|
|
coupons = m.params[1..-1].join(' ').scan(/#{COUPON_REGEXP}/)
|
|
end
|
|
|
|
def self.send_coupon coupon
|
|
@http ||= Net::HTTP.new(URL.host, URL.port)
|
|
@http.use_ssl = true
|
|
# http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
request = Net::HTTP::Post.new(URL)
|
|
request.add_field('Content-Type', 'application/json')
|
|
request.basic_auth USER, PASS
|
|
request.body = {'coupon' => coupon, 'organization' => ORGA}.to_json
|
|
response = @http.request(request)
|
|
@response = response
|
|
@request = request
|
|
response
|
|
end
|
|
|
|
def self.validate_coupon m, coupon
|
|
begin
|
|
response = send_coupon coupon
|
|
valid_response = response.code[0] == '2'
|
|
str = "#{coupon} " + (valid_response ? 'validated' : "failed (#{response.code})")
|
|
m.reply coupon if CONFIG['display_coupons']
|
|
rescue => e
|
|
m.reply "#{coupon} buggy"
|
|
end
|
|
end
|
|
|
|
# `curl https://api.pathwar.net/organization-coupons/#{coupon} -u '#{USER}:#{PASS}' -X GET`
|
|
def self.exec_coupon m
|
|
coupon = get_coupon m
|
|
validate_coupon m, coupon
|
|
end
|
|
|
|
def self.exec_coupon_somewhere m
|
|
coupons = get_coupons_somewhere m
|
|
coupons.each do |coupon|
|
|
validate_coupon m, coupon
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|