require "uri" require "net/http" class Admin::RegisterApiController < ApplicationController def register response = {} response["success"] = false domain = params[:site_domain] email = params[:admin_email] title = params[:site_title] site = RegisteredSite.where(:site_domain => domain).first rescue nil if site.nil? site = RegisteredSite.new site.site_domain = domain site.admin_email = email site.title_translations = title site.generate_confirmation_token site.save cp = CPanelUser.where(:email => email).first rescue nil if cp.nil? cp = CPanelUser.new(:email => email, :password => SecureRandom.hex(5)) end if !cp.first_time_run cp.registered_site_ids << site.id.to_s end cp.save response["success"] = true else response["message"] = "Site already registered." response["error"] = "SITE_ALREADY_REGISTERED" end if !site.nil? send_confirmation_email(site.admin_email, site.confirmation_token, site.site_token) p1 = fork {register_client_site(site,site.site_token) } Process.detach(p1) end render :json => ((params[:success] == 'error') ? response.merge({'success'=>params[:success]}).to_json : response.to_json) end def send_store_token site = RegisteredSite.where(:site_domain => params[:site_domain]).first uid = site.uid if !site.nil? render :json => {'store_token'=>uid,} end def send_confirmation_email(email, confirmation_token, site_token) url = "#{request.protocol}#{request.host_with_port}/register/confirm_email?confirmation=#{confirmation_token}&site=#{site_token}" email = Email.new(:mail_to => email, :mail_subject => "Confirmation email for orbit store.", :template => "email/site_confirmation_email.html.erb", :template_data => {"url" => url}) email.deliver end def send_email site_token = params[:store_token] site = RegisteredSite.find_by(:uid => site_token) rescue nil if !site.nil? send_confirmation_email(site.admin_email, site.confirmation_token, site.site_token) end render :body => "ok" end def re_register_url site_token = params[:store_token] site = RegisteredSite.find_by(:uid => site_token) rescue nil if !site.nil? site.site_domain = params[:site_domain] site.save watch_list_save_flag = (params['user']!= 'rulingcom' && params['user'].to_s != '') user_name = params['user'] puts ['user_name',user_name] site_anncs = SiteAnnc.where(visible: true) .select{|v| v.send_all || v.recieve_sites.include?(site)}.collect do |v| if watch_list_save_flag watch_list = v.watch_list if watch_list.select{|v| v[0]==site.id && v[1]==user_name}.count == 0 watch_list << [site.id,user_name] end v.update_attributes(watch_list: watch_list) end {title: v.title,content: v.content,see_more_link: v.see_more_link} end render :json => {"success" => true,'site_anncs'=>site_anncs}.to_json else render :json => {"success" => false}.to_json end end def check_permissions response = {} response["success"] = false store_token = params[:store_token] site = RegisteredSite.find_by(:uid => store_token) rescue nil if site.nil? response["message"] = "Invalid site token." response["error"] = "INVALID_SITE_TOKEN" elsif !site.site_confirmed response["message"] = "Site not confirmed, please confirm the email, sent to #{site.admin_email} to proceed." response["error"] = "SITE_NOT_CONFIRMED" elsif !site.access_granted response["message"] = "Store permissions revoked." response["error"] = "SITE_PERMISSION_DENIED" else response["success"] = true end render :json => ((params[:success] == 'error') ? response.merge(params).to_json : response.to_json) end def register_client_site(site=nil,store_token) if !site.nil? send_confirmation_email(site.admin_email, site.confirmation_token, site.site_token) end params_to_send = {'store_token' => store_token, "site_token" => params[:site_token]} uri = URI.parse("http://#{params[:site_domain]}/") request = Net::HTTP::Post.new("/store/confirmation") request.body = params_to_send.to_query begin success_flag = false begin response = Net::HTTP.start(uri.host, uri.port,:use_ssl => uri.scheme == 'https',open_timeout: 10,read_timeout: 10,verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http| http.request request end success_flag = (response.code == '200') rescue => e end if success_flag return response else uri = URI("https://#{params[:site_domain]}/store/confirmation") response = Net::HTTP.start(uri.host, uri.port,:use_ssl => uri.scheme == 'https',open_timeout: 10,read_timeout: 10,verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http| request = Net::HTTP::Post.new uri request.set_form_data(params_to_send) http.request request end #if response.code == 301 or http not available,use https to resend /store/confirmation return response end rescue => e puts ['e', e, e.backtrace] params[:success] = 'error' end end def confirm_email @confirmation = false site_token = params["site"] confirmation_token = params["confirmation"] site = RegisteredSite.where(:uid => site_token, :confirmation_token => confirmation_token).first rescue nil if !site.nil? site.confirmation_token = nil site.site_confirmed = true site.access_granted = true site.save @confirmation = true end end end