From f2b4114ad5bfce9cd25e569188b9576d83ac5d25 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Tue, 19 Nov 2019 00:08:56 +0630 Subject: [PATCH] change config for local server --- .code2lab.env | 1 - .../origami/dashboard_controller.rb | 15 +- app/models/license.rb | 189 +++++++++--------- app/models/printer/printer_worker.rb | 4 +- config/cable.yml | 2 +- config/initializers/license.rb | 2 - config/redis.yml | 4 +- config/secrets.yml | 10 +- 8 files changed, 111 insertions(+), 116 deletions(-) diff --git a/.code2lab.env b/.code2lab.env index 3a697ccd..0a6c7f0b 100644 --- a/.code2lab.env +++ b/.code2lab.env @@ -1,2 +1 @@ RAILS_ENV=production -SERVER_MODE=cloud diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 22aef2e1..7ccac407 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -2,10 +2,9 @@ class Origami::DashboardController < BaseOrigamiController def index @shop = Shop.first - Rails.logger.info ENV["SERVER_MODE"] - Rails.logger.info "<><><><><><><><>>" - today = DateTime.now.strftime('%Y-%m-%d') + today = DateTime.now.strftime('%Y-%m-%d') + @display_type = Lookup.find_by_lookup_type("display_type") @sale_data = Array.new @@ -15,7 +14,7 @@ class Origami::DashboardController < BaseOrigamiController if payment.payment_method == "mpu" || payment.payment_method == "visa" || payment.payment_method == "master" || payment.payment_method == "jcb" || payment.payment_method == "unionpay" || payment.payment_method == "alipay" pay = Sale.payment_sale('card', today, current_user) @sale_data.push({'card' => pay.payment_amount}) - else + else pay = Sale.payment_sale(payment.payment_method, today, current_user) @sale_data.push({payment.payment_method => pay.payment_amount}) end @@ -39,10 +38,10 @@ class Origami::DashboardController < BaseOrigamiController end else @account_data = nil - end + end @top_items = Sale.top_items(today,current_user) - @total_foc_items = Sale.total_foc_items(today,current_user) + @total_foc_items = Sale.total_foc_items(today,current_user) # get printer info @print_settings = PrintSetting.get_precision_delimiter() @@ -105,12 +104,12 @@ class Origami::DashboardController < BaseOrigamiController end def get_all_menu - @menus = Menu.active.all + @menus = Menu.active.all end def get_credit_sales credit_sales = SalePayment.get_credit_sales(params) - if !credit_sales.nil? + if !credit_sales.nil? result = {:status=> true, :data=> credit_sales } else result = {:status=> false, :message=>"There is no record." } diff --git a/app/models/license.rb b/app/models/license.rb index befb4b36..2c550a1e 100755 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -13,28 +13,27 @@ class License def initialize(server = "", lookup = "") #this code is hard-code to reflect server mode - Very important. - # self.server_mode = ENV["SERVER_MODE"] - self.server_mode = "cloud" + self.server_mode = ENV["SERVER_MODE"] if (server != "") self.class.base_uri server end - end + end # For Cloud - def detail_with_local_cache(lookup) + def detail_with_local_cache(lookup) aes = MyAesCrypt.new - aes_key, aes_iv = aes.export_to_file(lookup) - + aes_key, aes_iv = aes.export_to_file(lookup) + ##Check from local redis - if available load local otherwise get from remote - cache_key = "#{lookup}:license:#{aes_key}:hostname" + cache_key = "#{lookup}:license:#{aes_key}:hostname" cache_license = nil ##Get redis connection from connection pool redis = Redis.new - cache_license = redis.get(cache_key) - + cache_license = redis.get(cache_key) + Rails.logger.info "Cache key - " + cache_key.to_s if cache_license.nil? ##change the d/e key @@ -48,7 +47,7 @@ class License assign(aes_key, aes_iv) #Rails.logger.info "License - " + response.parsed_response.to_s - + redis = Redis.new redis.set(cache_key, Marshal.dump(@license)) # redis.sadd("License:cache:keys", cache_key) @@ -61,36 +60,36 @@ class License return true end - else + else @license = Marshal.load(cache_license) assign(aes_key, aes_iv) - # Rails.logger.info 'API License' + # Rails.logger.info 'API License' return true end end # For Local System - def detail_with_local_file() + def detail_with_local_file() renewal_date_str = read_license("renewable_date") - if check_expiring(renewal_date_str) - # return for all ok + if check_expiring(renewal_date_str) + # return for all ok return 1 else has_license = verify_license() if has_license - # return for expiring + # return for expiring return 2 else return 0 end end - # end - end + # end + end # License Activation def license_activate (shop, license_key, db_host, db_schema, db_user, db_password) - aes = MyAesCrypt.new - aes_key, aes_iv = aes.export_key(license_key) + aes = MyAesCrypt.new + aes_key, aes_iv = aes.export_key(license_key) @params = { query: { lookup_type: self.server_mode, iv_key: aes_iv, license_key: license_key } } response = self.class.get("/activate", @params) @@ -98,21 +97,21 @@ class License if (@activate["status"]) ##Check from local redis - if available load local otherwise get from remote - cache_key = "shop:#{@activate["shop_name"]}" + cache_key = "shop:#{@activate["shop_name"]}" - cache_license = nil + cache_license = nil ##Get redis connection from connection pool redis = Redis.new - cache_license = redis.get(cache_key) + cache_license = redis.get(cache_key) Rails.logger.info "Cache key - " + cache_key.to_s - if cache_license.nil? - cache = {"shop" => @activate["shop_name"], "key" => aes_key, "iv" => @activate["iv_key"], "renewable_date" => @activate["renewable_date"] } + if cache_license.nil? + cache = {"shop" => @activate["shop_name"], "key" => aes_key, "iv" => @activate["iv_key"], "renewable_date" => @activate["renewable_date"] } redis = Redis.new redis.set(cache_key, Marshal.dump(cache)) - end + end Rails.logger.info "License - " + response.parsed_response.to_s @@ -122,21 +121,21 @@ class License sym_path = File.expand_path("~/symmetric/") response = create_symmetric_config(sym_path, db_host, db_schema, db_user, db_password) - + if(response[:status]) response = run_symmetric(sym_path) end end else response = { "status": false, "message": "Activation Failed! Please contact code2lab call center!"} - end + end return response end - def verify_license - api_token = read_license_no_decrypt("api_token") + def verify_license + api_token = read_license_no_decrypt("api_token") @params = { query: {lookup_type: "application", api_token: api_token} } - + begin response = self.class.get("/verify", @params) @varified = response.parsed_response @@ -147,7 +146,7 @@ class License end else delete_license_file - end + end rescue SocketError => e Rails.logger.debug "In SocketError No Internet connection ! " @@ -161,21 +160,21 @@ class License rescue OpenURI::HTTPError Rails.logger.debug "Can't connect server" return true - end - return false + end + return false end # Check Expired before 30 days - def check_expiring(renewal_date_str) + def check_expiring(renewal_date_str) if !renewal_date_str.empty? - renewal_date = DateTime.parse(renewal_date_str) + renewal_date = DateTime.parse(renewal_date_str) renewal_date > Date.today.advance(:days => 30) end end # Check License expired date from PROVISION SERVER - def check_expired(renewal_date_str) + def check_expired(renewal_date_str) expired_date_str = read_license("renewable_date") renewal_date = DateTime.parse(renewal_date_str) if(renewal_date_str != expired_date_str) @@ -188,32 +187,32 @@ class License return false end end - + # Check License File exists def self.check_license_file - return File.exist?("config/license.yml") + return File.exist?("config/license.yml") end # read line by key for license file - def read_license(key_name) - decrypted_line = "" + def read_license(key_name) + decrypted_line = "" key, iv = get_redis_key() - if File.exist?("config/license.yml") + if File.exist?("config/license.yml") File.open("config/license.yml").each do |line| - if line.include? (key_name) - decrypted_line_array = line.split(": ") + if line.include? (key_name) + decrypted_line_array = line.split(": ") decrypted_line = AESCrypt.decrypt_data(decode_str(decrypted_line_array[1]), decode_str(key), decode_str(iv), ENV['CIPHER_TYPE']) end end - end + end return decrypted_line end # read line by key for license file without decrypt def read_license_no_decrypt(key) decrypted_line = "" - if File.exist?("config/license.yml") + if File.exist?("config/license.yml") File.open("config/license.yml").each do |line| if line.include? (key) decrypted_line_array = line.split(": ") @@ -228,18 +227,18 @@ class License def update_license(content, new_content) key, iv = get_redis_key() - if !new_content.include? "==" + if !new_content.include? "==" crypted_str = AESCrypt.encrypt_data(new_content, decode_str(key), decode_str(iv), ENV['CIPHER_TYPE']) end - + content_str = read_license_no_decrypt(content) - if File.exist?("config/license.yml") + if File.exist?("config/license.yml") file_str = File.read("config/license.yml") new_file_str = file_str.gsub(content_str, encode_str(crypted_str)) # To write changes to the file, use: File.open("config/license.yml", "w") {|file| file.puts new_file_str } - + # File.open("config/license.yml").each do |line| # new_file_str = line.gsub(content, crypted_str) # f.put @@ -249,33 +248,33 @@ class License # Re-get keys def get_key - api_token = read_license_no_decrypt("api_token") - shop_name = read_license_no_decrypt("shop_name") + api_token = read_license_no_decrypt("api_token") + shop_name = read_license_no_decrypt("shop_name") @params = { query: {lookup_type: "application", api_token: api_token } } response = self.class.get("/get_key", @params) @data = response.parsed_response - + if (@data["status"]) ##Check from local redis - if available load local otherwise get from remote - cache_key = "shop:#{shop_name.chomp}" + cache_key = "shop:#{shop_name.chomp}" - cache_license = nil + cache_license = nil ##Get redis connection from connection pool redis = Redis.new - cache_license = redis.get(cache_key) + cache_license = redis.get(cache_key) Rails.logger.info "Cache key - " + cache_key.to_s - if cache_license.nil? - cache = {"shop" => shop_name, "key" => @data["secret_key"], "iv" => @data["iv_key"], "renewable_date" => @data["renewable_date"] } + if cache_license.nil? + cache = {"shop" => shop_name, "key" => @data["secret_key"], "iv" => @data["iv_key"], "renewable_date" => @data["renewable_date"] } redis = Redis.new redis.set(cache_key, Marshal.dump(cache)) - end + end return true - end + end return false - end + end private def get_redis_key @@ -283,18 +282,18 @@ class License key = "" shop = read_license_no_decrypt("shop_name") ##Check from local redis - if available load local otherwise get from remote - cache_key = "shop:#{shop.chomp}" + cache_key = "shop:#{shop.chomp}" - cache_shop = nil + cache_shop = nil ##Get redis connection from connection pool redis = Redis.new - cache_shop = redis.get(cache_key) + cache_shop = redis.get(cache_key) - if !cache_shop.nil? - @shop = Marshal.load(cache_shop) - key = @shop["key"] - iv = @shop["iv"] + if !cache_shop.nil? + @shop = Marshal.load(cache_shop) + key = @shop["key"] + iv = @shop["iv"] end return key, iv end @@ -309,13 +308,13 @@ class License # License File Creation def create_license_file(response_data) - if File.exist?("config/license.yml") + if File.exist?("config/license.yml") delete_license_file end begin # Licese File Creation - File.open("config/license.yml", "w") do |f| + File.open("config/license.yml", "w") do |f| f.puts("iv_key: #{response_data['iv_key']}") f.puts("shop_name: #{response_data['shop_name']}") f.puts("email: #{response_data['email']}") @@ -327,11 +326,11 @@ class License f.puts("dbusername: #{response_data['dbusername']}") f.puts("dbpassword: #{response_data['dbpassword']}") f.puts("api_token: #{response_data['api_token']}") - f.puts("app_token: #{response_data['app_token']}") + f.puts("app_token: #{response_data['app_token']}") f.puts("plan_sku: #{response_data['plan_sku']}") f.puts("renewable_date: #{response_data['renewable_date']}") f.puts("plan_name: #{response_data['plan_name']}") - end + end rescue IOError response = { "status": false, "message": "Activation is success but something is wrong. \n Please contact code2lab call center!"} end @@ -354,15 +353,15 @@ class License f.write("group.id=sx\n") f.write("external.id=000\n") f.write("job.purge.period.time.ms=7200000\n") - f.write("job.routing.period.time.ms=5000\n") - f.write("job.push.period.time.ms=10000\n") - f.write("job.pull.period.time.ms=10000\n") - f.write("initial.load.create.first=true\n") + f.write("job.routing.period.time.ms=5000\n") + f.write("job.push.period.time.ms=10000\n") + f.write("job.pull.period.time.ms=10000\n") + f.write("initial.load.create.first=true\n") f.write("initial.load.use.extract.job.enabled=true\n") f.write("rest.api.enable=true\n") - f.close + f.close - # read from license file + # read from license file # shop_name = read_license_no_decrypt("shop_name") shop_name = "cloud" dbhost = read_license("dbhost") @@ -380,12 +379,12 @@ class License f.write("registration.url=http://#{db_host}:31415/sync/sx\n") f.write("group.id=cloud\n") f.write("external.id=001\n") - f.write("job.routing.period.time.ms=5000\n") - f.write("job.push.period.time.ms=10000\n") + f.write("job.routing.period.time.ms=5000\n") + f.write("job.push.period.time.ms=10000\n") f.write("job.pull.period.time.ms=10000\n") f.write("rest.api.enable=true\n") - # f.write("initial.load.create.first=true\n") - # f.write("initial.load.use.extract.job.enabled=true\n") + # f.write("initial.load.create.first=true\n") + # f.write("initial.load.use.extract.job.enabled=true\n") f.close rescue IOError response = { "status": false, "message": "Activation is success but something is wrong. \n Please contact code2lab call center!"} @@ -394,12 +393,12 @@ class License end end - # Run Symmetric + # Run Symmetric def run_symmetric(sym_path) # check_sym_proc_str = `#{sym_path + "bin/sym_service status"}` # check_sym_proc_str = check_sym_proc_str.split("\n") # sym_install_status = check_sym_proc_str[0].split(": ") - + check_sym_proc_str = `#{"sudo service SymmetricDS status"}` # Check Sym Installed @@ -414,7 +413,7 @@ class License check_sym_table = system("sudo " + sym_path + "/bin/symadmin --engine sx create-sym-tables") if check_sym_table sym_sql = Rails.root + "db/sym_master.sql" - + if File.exist? (sym_sql) # Import Sym Sql to db and start sym run_sym_sql = system("sudo " + sym_path + "/bin/dbimport --engine sx " + sym_sql.to_s) @@ -429,7 +428,7 @@ class License else response = { "status": false, "message": "Activation is success but Cannot create Sym Tables. \n Please contact code2lab call center!"} end - else + else response = { "status": false, "message": "Activation is success but Symmetric not running. \n Please contact code2lab call center!"} end end @@ -437,7 +436,7 @@ class License # Check Symmetric Running def check_sym_running(status, sym_path) # Run Sym Service - # if status.include? "Server is already running" + # if status.include? "Server is already running" # return true # elsif status.include? "false" # sym_start_str = `#{sym_path + "bin/sym_service start"}` @@ -445,9 +444,9 @@ class License # return true # else # check_sym_running(sym_start_status[0]) - # end + # end # else - # return true + # return true # end if status.include? "Active: active (running)" || "Active: active (exited)" #"Server is already running" @@ -458,15 +457,15 @@ class License # Delete License File def delete_license_file - File.delete("config/license.yml") if File.exist?("config/license.yml") + File.delete("config/license.yml") if File.exist?("config/license.yml") end # Assign db info for Cloud - def assign(aes_key, aes_iv) + def assign(aes_key, aes_iv) key = Base64.decode64(aes_key) iv = Base64.decode64(aes_iv) - - if (@license["dbhost"] || @license["dbschema"] || @license["dbusername"] || @license["dbpassword"] ) + + if (@license["dbhost"] || @license["dbschema"] || @license["dbusername"] || @license["dbpassword"] ) host = Base64.decode64(@license["dbhost"]) dbschema = Base64.decode64(@license["dbschema"]) dbusername = Base64.decode64(@license["dbusername"]) @@ -475,8 +474,8 @@ class License self.dbhost = AESCrypt.decrypt_data(host, key, iv, ENV['CIPHER_TYPE']) self.dbschema = AESCrypt.decrypt_data(dbschema, key, iv, ENV['CIPHER_TYPE']) self.dbusername = AESCrypt.decrypt_data(dbusername, key, iv, ENV['CIPHER_TYPE']) - self.dbpassword = AESCrypt.decrypt_data(dbpassword, key, iv, ENV['CIPHER_TYPE']) + self.dbpassword = AESCrypt.decrypt_data(dbpassword, key, iv, ENV['CIPHER_TYPE']) end - + end end diff --git a/app/models/printer/printer_worker.rb b/app/models/printer/printer_worker.rb index 0a580e40..e0d4fc85 100755 --- a/app/models/printer/printer_worker.rb +++ b/app/models/printer/printer_worker.rb @@ -1,9 +1,9 @@ require 'net/http' -#require 'cups' +require 'cups' class Printer::PrinterWorker attr_accessor :print_settings - + def initialize(print_settings) self.print_settings = print_settings end diff --git a/config/cable.yml b/config/cable.yml index 36f0b961..e740f386 100755 --- a/config/cable.yml +++ b/config/cable.yml @@ -1,6 +1,6 @@ redis: &redis adapter: redis - url: redis://172.17.0.1:6380/1 + url: redis://localhost:6379/1 production: *redis development: *redis diff --git a/config/initializers/license.rb b/config/initializers/license.rb index 31510a0f..7eed14a6 100644 --- a/config/initializers/license.rb +++ b/config/initializers/license.rb @@ -3,6 +3,4 @@ if File.exist?("config/license.yml") config.fetch(Rails.env, {}).each do |key, value| ENV[key.upcase] = value.to_s end -else - ENV["SERVER_MODE"] = "cloud" end diff --git a/config/redis.yml b/config/redis.yml index 493a6027..b8c7b2eb 100644 --- a/config/redis.yml +++ b/config/redis.yml @@ -9,5 +9,5 @@ test: <<: *default production: - db: 0 - url: redis://172.17.0.1:6380 + <<: *default + url: redis://127.0.0.1:6379 diff --git a/config/secrets.yml b/config/secrets.yml index ff014434..069b1403 100755 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -11,8 +11,8 @@ # if you're sharing your code publicly. development: - secret_key_base: b61d85f8ed2a1a9e0eeece3443b3e8f838d002cc1d9f32115d8e93db920e2957adfedc57501d44741211538f3108b742cdeada87d5bfae796c53da1f90a3cd61 - sx_provision_url: connect.smartsales.asia/api #connect.smartsales.dev/api #connect.smartsales.asia/api #provision.zsai.ws/api + secret_key_base: b61d85f8ed2a1a9e0eeece3443b3e8f838d002cc1d9f32115d8e93db920e2957adfedc57501d44741211538f3108b742cdeada87d5bfae796c53da1f90a3cd61 + sx_provision_url: connect.smartsales.asia/api #connect.smartsales.dev/api #connect.smartsales.asia/api #provision.zsai.ws/api server_mode: application cipher_type: AES-256-CBC sx_key: Wh@t1$C2L @@ -23,8 +23,8 @@ test: # Do not keep production secrets in the repository, # instead read values from the environment. production: - secret_key_base: c4bc81065013f9a3506d385bcbd49586c42e586488144b0de90c7da36867de9fa880f46b5c4f86f0ce9b7c783bb5a73bdb0e5605a47716567294390e726d3e22 - sx_provision_url: 52.221.188.144:9292/api #connect.smartsales.asia/api #192.168.1.147:3002/api - server_mode: cloud + secret_key_base: c4bc81065013f9a3506d385bcbd49586c42e586488144b0de90c7da36867de9fa880f46b5c4f86f0ce9b7c783bb5a73bdb0e5605a47716567294390e726d3e22 + sx_provision_url: connect.smartsales.asia/api #52.221.188.144:9292/api #192.168.1.147:3002/api + server_mode: application cipher_type: AES-256-CBC sx_key: Wh@t1$C2L