diff --git a/app/assets/javascripts/admin/store_manager.js b/app/assets/javascripts/admin/store_manager.js new file mode 100644 index 0000000..335aabf --- /dev/null +++ b/app/assets/javascripts/admin/store_manager.js @@ -0,0 +1,112 @@ +var StoreManager = function(){ + var storeArea = $("#store-area"), + loadingArea = storeArea.find(".loading-store"), + loadingAreaStatus = loadingArea.find(".loading-status"), + formArea = storeArea.find(".form-area"); + + var initialize = function(){ + loadingAreaStatus.text("Contacting Ruling Store"); + setTimeout(step1,1000); + } + + var step1 = function(){ + $.ajax({ + "type" : "get", + "dataType" : "json", + "url" : "/admin/store/check_credentials" + }).done(function(status){ + if(status.success == true){ + loadingAreaStatus.text("Checking permissions"); + setTimeout(step2,1000); + }else if(status.success == false){ + setTimeout(loadRegisterForm,1000); + } + }).fail(showError); + } + + var step2 = function(){ + $.ajax({ + "type" : "get", + "dataType" : "json", + "url" : "/admin/store/check_permissions" + }).done(function(data){ + if(data.success){ + loadingAreaStatus.text("Fetching store data") + setTimeout(loadTemplateStore,1000); + }else if(!data.success){ + loadingArea.find("img").hide(); + loadingAreaStatus.text(data.message); + if(data.error == "SITE_NOT_CONFIRMED"){ + loadingArea.find("p").eq(1).html("Resend Email"); + }else if(data.error == "SITE_PERMISSION_DENIED"){ + loadingArea.find("p").eq(1).html("Please contact www.rulingcom.com."); + }else{ + loadingArea.find("p").eq(1).html("Please contact www.rulingcom.com."); + } + } + }).fail(showError); + } + + var resendEmail = function(){} + + var loadTemplateStore = function(){ + $.ajax({ + "type" : "get", + "dataType" : "html", + "url" : "/admin/store/template_store" + }).done(function(html){ + storeArea.html(html); + }).fail(showError); + } + + var loadRegisterForm = function(){ + loadingAreaStatus.text("Loading registeration form.") + $.ajax({ + "type" : "get", + "dataType" : "html", + "url" : "/admin/store/register_form" + }).done(function(html){ + loadingArea.hide(); + formArea.html(html); + var form = formArea.find("form"); + new FormValidator(form); + form.on("submit",function(){ + var email = form.find("#inputEmail").val(); + if(email){ + loadingAreaStatus.text("Registering with Orbit Store") + formArea.hide(); + loadingArea.show(); + $.ajax({ + "type" : "post", + "url" : form.attr("action"), + "dataType" : "json", + "data" : {"email" : email} + }).done(function(data){ + if(data.success){ + loadingArea.find("img").hide(); + loadingAreaStatus.text("Email sent to the address " + email + ". Please verify and come back."); + loadingArea.find("p").eq(1).remove(); + }else{ + loadingArea.find("img").hide(); + loadingAreaStatus.text(data.message); + loadingArea.find("p").eq(1).html("Please contact www.rulingcom.com."); + } + }).fail(showError) + } + return false; + }) + }) + } + var showError = function(){ + loadingArea.find("img").hide(); + loadingAreaStatus.text("There was some unknown error."); + loadingArea.find("p").eq(1).html("Please try again later or contact www.rulingcom.com."); + } + + initialize(); +} + + + +// step 1 -> check connection to store server +// step 2 -> check for site confirmation and access permission \ No newline at end of file diff --git a/app/assets/javascripts/validator.js b/app/assets/javascripts/validator.js index 2cd0f65..847a6d4 100644 --- a/app/assets/javascripts/validator.js +++ b/app/assets/javascripts/validator.js @@ -25,8 +25,9 @@ var FormValidator = function(form){ nospace : function(value){ return (/\s/.test(value) ? false : true); }, - email : function(){ - + email : function(value){ + var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(value); } } diff --git a/app/controllers/admin/store_controller.rb b/app/controllers/admin/store_controller.rb new file mode 100644 index 0000000..b2e1f11 --- /dev/null +++ b/app/controllers/admin/store_controller.rb @@ -0,0 +1,53 @@ +require "uri" +require "net/http" +class Admin::StoreController < OrbitAdminController + layout false + before_action :store_url + def check_credentials + if current_site.store_token.nil? + render :json => {"success" => false}.to_json + else + render :json => {"success" => true}.to_json + end + end + + def register_form + + end + + def template_store + + end + + def check_permissions + params_to_send = {'store_token' => current_site.store_token} + uri = URI.parse(@store_url) + http = Net::HTTP.new(uri.host,uri.port) + request = Net::HTTP::Get.new("/site/permissions") + request.body = params_to_send.to_query + response = http.request(request) + data = JSON.parse(response.body) + if !data["success"] && data["error"] == "INVALID_SITE_TOKEN" + current_site.store_token = nil + current_site.save + end + render :json => data.to_json + end + + def register_site + params_to_send = {'site_domain' => request.host_with_port, 'admin_email' => params["email"], "site_token" => current_site.uid} + uri = URI.parse(@store_url) + http = Net::HTTP.new(uri.host,uri.port) + request = Net::HTTP::Post.new("/register/site") + request.body = params_to_send.to_query + response = http.request(request) + data = JSON.parse(response.body) + render :json => data.to_json + end + + + private + def store_url + @store_url = "http://localhost:3000" + end +end \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bfbc6cf..b02e70f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -29,7 +29,7 @@ class ApplicationController < ActionController::Base if !params[:locale] and !session[:locale] if current_site.enable_language_detection browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].split(',').first.underscore rescue nil - session[:locale] = in_use_locales.include?(browser_locale.to_sym) ? browser_locale : nil + session[:locale] = (in_use_locales.include?(browser_locale.to_sym) ? browser_locale : nil) rescue nil elsif current_site.default_locale session[:locale] = current_site.default_locale end diff --git a/app/controllers/store_api_controller.rb b/app/controllers/store_api_controller.rb new file mode 100644 index 0000000..50eb645 --- /dev/null +++ b/app/controllers/store_api_controller.rb @@ -0,0 +1,14 @@ +class StoreApiController < ApplicationController + def confirmation + site_token = params[:site_token] + store_token = params[:store_token] + puts current_site.to_s + if current_site.uid.eql?(site_token) + current_site.store_token = store_token + current_site.save + render :json => {"success" => true}.to_json + else + render :json => {"success" => false}.to_json + end + end +end \ No newline at end of file diff --git a/app/models/site.rb b/app/models/site.rb index fbd8b3f..139bd27 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -32,8 +32,7 @@ class Site field :search,:type => Hash field :site_settings field :template, type: String - field :site_token - field :store_confirmation, type: Boolean, default: false + field :store_token field :month_traffic_cache @@ -42,20 +41,6 @@ class Site mount_uploader :favicon, ImageUploader mount_uploader :mobile_icon, ImageUploader - def confirm_store(site_token) - if self.site_token.eql?(site_token) - self.store_confirmation = true - self.save - end - end - - def generate_site_token - if self.site_token.nil? - self.site_token = SecureRandom.uuid.gsub('-','') - self.save - end - end - def register_site(url,university,department,email,country) api_key = STORE_CONFIG[:store_settings]["api_key"] self.generate_site_token diff --git a/app/views/admin/designs/index.html.erb b/app/views/admin/designs/index.html.erb index bf7a9ce..1f0da20 100644 --- a/app/views/admin/designs/index.html.erb +++ b/app/views/admin/designs/index.html.erb @@ -143,7 +143,7 @@
@@ -152,18 +152,7 @@- <%= image_tag("preloader.gif", size: "50") %> - Loading template store... - | - |
Please wait ...
+