forked from saurabh/orbit4-5
orbit store integration
This commit is contained in:
parent
50582cdbd8
commit
5766c6355f
|
@ -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("<a href='#'>Resend Email</a>");
|
||||||
|
}else if(data.error == "SITE_PERMISSION_DENIED"){
|
||||||
|
loadingArea.find("p").eq(1).html("Please contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||||
|
}else{
|
||||||
|
loadingArea.find("p").eq(1).html("Please contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).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 <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||||
|
}
|
||||||
|
}).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 <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||||
|
}
|
||||||
|
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// step 1 -> check connection to store server
|
||||||
|
// step 2 -> check for site confirmation and access permission
|
|
@ -25,8 +25,9 @@ var FormValidator = function(form){
|
||||||
nospace : function(value){
|
nospace : function(value){
|
||||||
return (/\s/.test(value) ? false : true);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -29,7 +29,7 @@ class ApplicationController < ActionController::Base
|
||||||
if !params[:locale] and !session[:locale]
|
if !params[:locale] and !session[:locale]
|
||||||
if current_site.enable_language_detection
|
if current_site.enable_language_detection
|
||||||
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].split(',').first.underscore rescue nil
|
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
|
elsif current_site.default_locale
|
||||||
session[:locale] = current_site.default_locale
|
session[:locale] = current_site.default_locale
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
|
@ -32,8 +32,7 @@ class Site
|
||||||
field :search,:type => Hash
|
field :search,:type => Hash
|
||||||
field :site_settings
|
field :site_settings
|
||||||
field :template, type: String
|
field :template, type: String
|
||||||
field :site_token
|
field :store_token
|
||||||
field :store_confirmation, type: Boolean, default: false
|
|
||||||
|
|
||||||
field :month_traffic_cache
|
field :month_traffic_cache
|
||||||
|
|
||||||
|
@ -42,20 +41,6 @@ class Site
|
||||||
mount_uploader :favicon, ImageUploader
|
mount_uploader :favicon, ImageUploader
|
||||||
mount_uploader :mobile_icon, 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)
|
def register_site(url,university,department,email,country)
|
||||||
api_key = STORE_CONFIG[:store_settings]["api_key"]
|
api_key = STORE_CONFIG[:store_settings]["api_key"]
|
||||||
self.generate_site_token
|
self.generate_site_token
|
||||||
|
|
|
@ -143,7 +143,7 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="pannel-footer">
|
<div class="pannel-footer">
|
||||||
<button id="apply_change_btn" onclick="apply_change();" class="btn btn-primary btn-small pull-right">Appy Change</button>
|
<button id="apply_change_btn" onclick="apply_change();" class="btn btn-primary btn-small pull-right">Apply Change</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -152,18 +152,7 @@
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<div class="panel-heading"><i class="icon-shopping-cart"></i><span class="break"></span><%= t(:template_store) %></div>
|
<div class="panel-heading"><i class="icon-shopping-cart"></i><span class="break"></span><%= t(:template_store) %></div>
|
||||||
<div class="pannel-body">
|
<div class="pannel-body">
|
||||||
|
<%= render "admin/store/templates" %>
|
||||||
<table id="mt-list" class="table main-list">
|
|
||||||
<tbody>
|
|
||||||
<tr id="loading">
|
|
||||||
<td>
|
|
||||||
<%= image_tag("preloader.gif", size: "50") %>
|
|
||||||
<span>Loading template store...</span>
|
|
||||||
<td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="pannel-footer">
|
<div class="pannel-footer">
|
||||||
</div>
|
</div>
|
||||||
|
@ -176,58 +165,3 @@
|
||||||
<div class="form-actions form-fixed pagination-right">
|
<div class="form-actions form-fixed pagination-right">
|
||||||
<%#= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
|
<%#= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
// $.ajax({
|
|
||||||
// url : "<%#= admin_template_store_path %>",
|
|
||||||
// type : "get",
|
|
||||||
// datatType : "html"
|
|
||||||
// }).done(function(data){
|
|
||||||
// $("#loading").addClass('hide');
|
|
||||||
// $("#mt-list").html(data);
|
|
||||||
// bindHandlers();
|
|
||||||
// }).fail(function(){
|
|
||||||
// $("#loading").addClass('hide');
|
|
||||||
// $("#mt-list").html("<tr><td>Error loading template store</td></tr>");
|
|
||||||
// })
|
|
||||||
$(document).on('change', '.design_default', function(){
|
|
||||||
$("#alert_wrap").show();
|
|
||||||
$(".modal-backdrop").show();
|
|
||||||
$(this).attr('value');
|
|
||||||
// console.log($(this).attr('rel') + '/' + $(this).val());
|
|
||||||
$.getScript($(this).attr('rel'),function(){
|
|
||||||
$("#alert_wrap").hide();
|
|
||||||
$(".modal-backdrop").hide();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
var bindHandlers = function(){
|
|
||||||
// $("a.download-link").on(clickEvent,function(){
|
|
||||||
// if($(this).attr("disabled") == "disabled")return false;
|
|
||||||
// var el = $(this);
|
|
||||||
// el.removeClass("btn-primary").addClass("btn-info").text("Installing").attr('disabled',"disabled");
|
|
||||||
// $.ajax({
|
|
||||||
// url : "<%#= admin_template_store_download_theme_path %>",
|
|
||||||
// data : el.data(),
|
|
||||||
// dataType : "json",
|
|
||||||
// type : "post"
|
|
||||||
// }).done(function(data){
|
|
||||||
// if(data.success){
|
|
||||||
// el.removeClass('btn-info').addClass('btn-success').text("Installed");
|
|
||||||
// $.ajax({
|
|
||||||
// url: '<%= admin_design_list_path %>',
|
|
||||||
// type: 'get',
|
|
||||||
// dataType: 'html'
|
|
||||||
// })
|
|
||||||
// .done(function(data) {
|
|
||||||
// $("#tbody_designs").html(data);
|
|
||||||
// $(".toggle-check").togglebox();
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }).fail(function(){
|
|
||||||
// el.removeClass('btn-info').addClass('btn-danger').text("Error, please try again.").removeAttr('disabled');
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<%= javascript_include_tag "admin/store_manager" %>
|
||||||
|
<%= javascript_include_tag "validator" %>
|
||||||
|
<style type="text/css">
|
||||||
|
.loading-store{
|
||||||
|
width: 320px;
|
||||||
|
margin: 150px auto 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.loading-status{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.form-area{
|
||||||
|
width: 500px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.controls span{
|
||||||
|
display: inline-block;
|
||||||
|
padding: 5px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="store-area">
|
||||||
|
<div class="loading-store">
|
||||||
|
<%= image_tag("preloader.gif", size: "50") %>
|
||||||
|
<p class="loading-status"></p>
|
||||||
|
<p> Please wait ... </p>
|
||||||
|
</div>
|
||||||
|
<div class="form-area">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
new StoreManager();
|
||||||
|
</script>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<h4 class="text-center">Store Registration Form</h4>
|
||||||
|
<hr />
|
||||||
|
<form id="store_registration_form" action="/admin/store/register_site" method="post" class="form-horizontal">
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">Site Domain : </label>
|
||||||
|
<div class="controls">
|
||||||
|
<span><%= request.host_with_port %></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="inputEmail">Admin Email : </label>
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" id="inputEmail" placeholder="Email" name="admin_email" data-fv-validation="required;email;" data-fv-messages="Cannot be empty.;Not valid email.;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label">Site Token : </label>
|
||||||
|
<div class="controls">
|
||||||
|
<span><%= current_site.uid %></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<input type="submit" class="btn" value="Register" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
|
@ -0,0 +1 @@
|
||||||
|
This is template store.
|
|
@ -26,6 +26,8 @@ Orbit::Application.routes.draw do
|
||||||
|
|
||||||
get "/module/:name" => "home#index"
|
get "/module/:name" => "home#index"
|
||||||
get "/module/:name/show" => "home#show"
|
get "/module/:name/show" => "home#show"
|
||||||
|
post "/store/confirmation" => "store_api#confirmation"
|
||||||
|
|
||||||
# The priority is based upon order of creation: first created -> highest priority.
|
# The priority is based upon order of creation: first created -> highest priority.
|
||||||
# See how all your routes lay out with "rake routes".
|
# See how all your routes lay out with "rake routes".
|
||||||
|
|
||||||
|
@ -216,6 +218,14 @@ Orbit::Application.routes.draw do
|
||||||
get 'module_store/toggle_module' => 'module_store#toggle_module'
|
get 'module_store/toggle_module' => 'module_store#toggle_module'
|
||||||
get 'module_store/restart_server' => 'module_store#restart_server'
|
get 'module_store/restart_server' => 'module_store#restart_server'
|
||||||
|
|
||||||
|
#store routes
|
||||||
|
|
||||||
|
get "/store/check_credentials" => "store#check_credentials"
|
||||||
|
get "/store/register_form" => "store#register_form"
|
||||||
|
post "/store/register_site" => "store#register_site"
|
||||||
|
get "/store/check_permissions" => "store#check_permissions"
|
||||||
|
get "/store/template_store" => "store#template_store"
|
||||||
|
|
||||||
|
|
||||||
get "import" => "import#index"
|
get "import" => "import#index"
|
||||||
get "import/check_url" => "import#check_url"
|
get "import/check_url" => "import#check_url"
|
||||||
|
|
Loading…
Reference in New Issue