Modernized the app with app structure from Stage Manager
This commit is contained in:
parent
4568733655
commit
72bb25a6ad
21
.rubocop.yml
Normal file
21
.rubocop.yml
Normal file
@ -0,0 +1,21 @@
|
||||
AllCops:
|
||||
NewCops: enable
|
||||
|
||||
Layout/EmptyLinesAroundClassBody:
|
||||
EnforcedStyle: 'empty_lines_except_namespace'
|
||||
Layout/EmptyLinesAroundModuleBody:
|
||||
EnforcedStyle: 'empty_lines_except_namespace'
|
||||
Metrics/ClassLength:
|
||||
Max: 150
|
||||
Style/ClassVars:
|
||||
Enabled: false
|
||||
Style/GlobalVars:
|
||||
Enabled: false
|
||||
Style/MethodCallWithoutArgsParentheses:
|
||||
Enabled: false
|
||||
Style/MethodCallWithArgsParentheses:
|
||||
Enabled: true
|
||||
Style/RedundantReturn:
|
||||
Enabled: false
|
||||
Style/TrailingCommaInHashLiteral:
|
||||
EnforcedStyleForMultiline: consistent_comma
|
14
Gemfile
14
Gemfile
@ -1,8 +1,16 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'sinatra', '~> 3.0'
|
||||
gem 'puma', '~> 6.0'
|
||||
|
||||
gem 'rerun'
|
||||
gem 'puma', '~> 6.1'
|
||||
|
||||
gem 'net-ldap', '~> 0.17'
|
||||
|
||||
group :development, :test do
|
||||
# Use guard-rack gem to auto-reload app
|
||||
gem 'guard-rack'
|
||||
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
|
||||
|
||||
# rubocop and extensions for code style
|
||||
gem 'rubocop'
|
||||
end
|
||||
|
||||
|
63
Gemfile.lock
63
Gemfile.lock
@ -1,42 +1,93 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
ast (2.4.2)
|
||||
coderay (1.1.3)
|
||||
ffi (1.15.5)
|
||||
ffi (1.15.5-x64-mingw-ucrt)
|
||||
listen (3.7.1)
|
||||
formatador (1.1.0)
|
||||
guard (2.18.0)
|
||||
formatador (>= 0.2.4)
|
||||
listen (>= 2.7, < 4.0)
|
||||
lumberjack (>= 1.0.12, < 2.0)
|
||||
nenv (~> 0.1)
|
||||
notiffany (~> 0.0)
|
||||
pry (>= 0.13.0)
|
||||
shellany (~> 0.0)
|
||||
thor (>= 0.18.1)
|
||||
guard-rack (2.2.1)
|
||||
ffi
|
||||
guard (~> 2.3)
|
||||
spoon
|
||||
json (2.6.3)
|
||||
listen (3.8.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
lumberjack (1.2.8)
|
||||
method_source (1.0.0)
|
||||
mustermann (3.0.0)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
nenv (0.3.0)
|
||||
net-ldap (0.17.1)
|
||||
nio4r (2.5.8)
|
||||
puma (6.0.0)
|
||||
notiffany (0.1.3)
|
||||
nenv (~> 0.1)
|
||||
shellany (~> 0.0)
|
||||
parallel (1.22.1)
|
||||
parser (3.2.1.1)
|
||||
ast (~> 2.4.1)
|
||||
pry (0.14.2)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
puma (6.2.1)
|
||||
nio4r (~> 2.0)
|
||||
rack (2.2.4)
|
||||
rack-protection (3.0.4)
|
||||
rack
|
||||
rainbow (3.1.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rerun (0.13.1)
|
||||
listen (~> 3.0)
|
||||
regexp_parser (2.7.0)
|
||||
rexml (3.2.5)
|
||||
rubocop (1.48.1)
|
||||
json (~> 2.3)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.2.0.0)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.26.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.28.0)
|
||||
parser (>= 3.2.1.0)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
shellany (0.0.1)
|
||||
sinatra (3.0.4)
|
||||
mustermann (~> 3.0)
|
||||
rack (~> 2.2, >= 2.2.4)
|
||||
rack-protection (= 3.0.4)
|
||||
tilt (~> 2.0)
|
||||
spoon (0.0.6)
|
||||
ffi
|
||||
thor (1.2.1)
|
||||
tilt (2.0.11)
|
||||
unicode-display_width (2.4.2)
|
||||
wdm (0.1.1)
|
||||
|
||||
PLATFORMS
|
||||
x64-mingw-ucrt
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
guard-rack
|
||||
net-ldap (~> 0.17)
|
||||
puma (~> 6.0)
|
||||
rerun
|
||||
puma (~> 6.1)
|
||||
rubocop
|
||||
sinatra (~> 3.0)
|
||||
wdm (>= 0.1.0)
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.5
|
||||
|
6
Guardfile
Normal file
6
Guardfile
Normal file
@ -0,0 +1,6 @@
|
||||
guard 'rack' do
|
||||
watch('Gemfile.lock')
|
||||
watch('config.ru')
|
||||
watch('server.rb')
|
||||
watch(%r{^(app)/.*})
|
||||
end
|
12
Rakefile
12
Rakefile
@ -1,11 +1,17 @@
|
||||
require 'bundler/setup'
|
||||
|
||||
namespace :server do
|
||||
task :dev do
|
||||
%x{puma -C puma.rb}
|
||||
task :start do
|
||||
system('bundle exec puma -C config/puma.rb')
|
||||
end
|
||||
|
||||
task :reload do
|
||||
%x{rerun --no-notify 'puma -C puma.rb'}
|
||||
system('guard')
|
||||
end
|
||||
end
|
||||
|
||||
namespace :test do
|
||||
task :lint do
|
||||
system("rubocop app/ server.rb")
|
||||
end
|
||||
end
|
||||
|
32
app/config.rb
Normal file
32
app/config.rb
Normal file
@ -0,0 +1,32 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'yaml'
|
||||
|
||||
# Configuration loader - loads config defaults and an optional config file
|
||||
class Config
|
||||
|
||||
DEFAULT_CONFIG = 'config/defaults.yaml'
|
||||
|
||||
def initialize(config_path)
|
||||
# Load the default config
|
||||
@data = YAML.load_file(DEFAULT_CONFIG)
|
||||
|
||||
# End if the optional config file doesn't exist
|
||||
return unless File.exist?(config_path)
|
||||
|
||||
# If the optional config exists, load it up!
|
||||
@data.merge!(YAML.load_file(config_path))
|
||||
end
|
||||
|
||||
def get(key)
|
||||
bits = key.split('.')
|
||||
value = @data
|
||||
|
||||
bits.each do |bit|
|
||||
value = value[bit]
|
||||
end
|
||||
|
||||
return value
|
||||
end
|
||||
|
||||
end
|
@ -1,8 +1,14 @@
|
||||
class AuthController < Sinatra::Base
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'net/ldap'
|
||||
|
||||
class Webdap
|
||||
# Handles /auth routes
|
||||
class AuthController
|
||||
|
||||
get '/login' do
|
||||
erb :'auth/login', :locals => {
|
||||
:title => 'Login to your account'
|
||||
erb :'auth/login', locals: {
|
||||
title: 'Login to your account',
|
||||
}
|
||||
end
|
||||
|
||||
@ -16,11 +22,12 @@ class AuthController < Sinatra::Base
|
||||
redirect '/account/view'
|
||||
else
|
||||
# Authentication failure
|
||||
erb :'auth/login', :locals => {
|
||||
:title => 'Login to your account',
|
||||
:fail => true
|
||||
erb :'auth/login', locals: {
|
||||
title: 'Login to your account',
|
||||
fail: true,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
@ -1,9 +1,14 @@
|
||||
class IndexController < Sinatra::Base
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Webdap
|
||||
# Handles top-level routes
|
||||
class IndexController
|
||||
|
||||
get '/' do
|
||||
erb :index, :locals => {
|
||||
:title => 'Home'
|
||||
erb :index, locals: {
|
||||
title: 'Home',
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
24
app/helpers.rb
Normal file
24
app/helpers.rb
Normal file
@ -0,0 +1,24 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# ERB view helper functions
|
||||
module Helpers
|
||||
|
||||
def nullable(value)
|
||||
# Returns the value if it actually exists
|
||||
return value if value && (value != '')
|
||||
|
||||
# Returns a default 'N/a' string
|
||||
return 'N/a'
|
||||
end
|
||||
|
||||
def date_format(date)
|
||||
dt = date.to_datetime
|
||||
return dt.strftime('%B %d, %Y, %I:%M:%S %p')
|
||||
end
|
||||
|
||||
def date_format_input(date)
|
||||
dt = date.to_datetime
|
||||
return dt.strftime('%Y-%m-%dT%H:%M:%S')
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Handles LDAP accounts
|
||||
class Account
|
||||
|
||||
def name
|
||||
return 'N/a'
|
||||
end
|
||||
|
||||
end
|
@ -1,10 +0,0 @@
|
||||
class Sinatra::Base
|
||||
|
||||
configure do
|
||||
enable :sessions
|
||||
|
||||
set :views, './views'
|
||||
set :public_folder, './public'
|
||||
end
|
||||
|
||||
end
|
26
config.ru
26
config.ru
@ -1,22 +1,10 @@
|
||||
require 'rubygems'
|
||||
require 'sinatra/base'
|
||||
require 'yaml'
|
||||
# Load application config
|
||||
require_relative 'app/config.rb'
|
||||
$conf = Config.new(File.join(__dir__, 'config/config.yaml'))
|
||||
|
||||
require_relative 'app/settings.rb'
|
||||
# Load Sinatra server
|
||||
require_relative './server.rb'
|
||||
|
||||
defaultCnf = YAML::load_file(File.join(__dir__, 'config/defaults.yaml'))
|
||||
cnf = YAML::load_file(File.join(__dir__, 'config/local.yaml'))
|
||||
cnf = defaultCnf.merge(cnf)
|
||||
# Run application
|
||||
run Webdap
|
||||
|
||||
require 'net/ldap'
|
||||
|
||||
require_relative 'app/controllers/index.rb'
|
||||
require_relative 'app/controllers/auth.rb'
|
||||
|
||||
map "/" do
|
||||
run IndexController
|
||||
end
|
||||
|
||||
map "/auth" do
|
||||
run AuthController
|
||||
end
|
||||
|
@ -1,3 +1,7 @@
|
||||
ldap:
|
||||
server_url: 'ldap://ldap.example.com'
|
||||
port: 389
|
||||
|
||||
server:
|
||||
address: '127.0.0.1'
|
||||
port: 4567
|
||||
|
6
config/puma.rb
Normal file
6
config/puma.rb
Normal file
@ -0,0 +1,6 @@
|
||||
# Load application config
|
||||
require './app/config.rb'
|
||||
$conf = Config.new(File.join(__dir__, 'config/config.yaml'))
|
||||
|
||||
bind_address = "tcp://#{$conf.get('server.address')}:#{$conf.get('server.port')}"
|
||||
bind bind_address
|
11
puma.rb
11
puma.rb
@ -1,11 +0,0 @@
|
||||
root = Dir.getwd.to_s
|
||||
|
||||
bind_address = '0.0.0.0'
|
||||
bind_port = 3108
|
||||
bind "tcp://#{bind_address}:#{bind_port}"
|
||||
|
||||
pidfile './tmp/puma.pid'
|
||||
state_path './tmp/puma.state'
|
||||
rackup root.to_s + '/config.ru'
|
||||
|
||||
threads 4, 8
|
60
server.rb
Normal file
60
server.rb
Normal file
@ -0,0 +1,60 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'logger'
|
||||
require 'sinatra/base'
|
||||
require 'rack/protection'
|
||||
|
||||
# Base Sinatra app
|
||||
class Webdap < Sinatra::Base
|
||||
|
||||
@@my_app = {}
|
||||
|
||||
def self.new(*)
|
||||
self < Webdap ? super : Rack::URLMap.new(@@my_app)
|
||||
end
|
||||
|
||||
def
|
||||
self.map(url) @@my_app[url] = self
|
||||
end
|
||||
|
||||
configure do
|
||||
enable :sessions
|
||||
|
||||
# Enable rack protection middleware
|
||||
use Rack::Protection
|
||||
|
||||
# Set up static file serving
|
||||
enable :static
|
||||
set :public_folder, File.join(settings.root, '/public')
|
||||
|
||||
# Set up our view engine
|
||||
set :views, File.join(settings.root, '/views')
|
||||
end
|
||||
|
||||
# Initialize logging
|
||||
logger = Logger.new($stdout)
|
||||
logger.level = Logger::INFO
|
||||
|
||||
# Load helper functions
|
||||
require_relative 'app/helpers'
|
||||
helpers Helpers
|
||||
|
||||
## Map controllers
|
||||
# Top-level routes controller
|
||||
class IndexController < Webdap
|
||||
|
||||
map '/'
|
||||
|
||||
end
|
||||
|
||||
# Authentication routes controller
|
||||
class AuthController < Webdap
|
||||
|
||||
map '/auth'
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# Load controllers
|
||||
Dir.glob('./app/controllers/*.rb').sort().each { |f| require f }
|
Loading…
Reference in New Issue
Block a user