Persist sessions using a consistent session secret and memcached

Fixes #79
This commit is contained in:
R. Tyler Croy 2017-12-23 14:38:50 -08:00
parent 018b7a0828
commit 452e81c0d2
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
4 changed files with 58 additions and 8 deletions

View File

@ -2,6 +2,18 @@
version: '3' version: '3'
services: services:
webapp: webapp:
image: 'rtyler/codevalet-webapp:latest' image: 'codevalet/webapp:latest'
ports: ports:
- 9292:9292 - 9292:9292
links:
- cache
environment:
- USE_MEMCACHED=true
- SESSION_SECRET=fiddlesticks
- WARDEN_GITHUB_VERIFIER_SECRET=fiddlesticks
cache:
image: 'memcached:alpine'
command: '-v'
ports:
- 11211:11211

View File

@ -1,12 +1,28 @@
source 'https://rubygems.org' source 'https://rubygems.org'
# Web framework, yey
gem 'sinatra' gem 'sinatra'
gem 'haml'
gem 'warden-github' # The actual webserver
gem 'kramdown'
gem 'sentry-raven'
gem 'puma' gem 'puma'
# For rendering all the views
gem 'haml'
# Provides some semblance of github-based authentication and authorization
# within the rack app
gem 'warden-github'
# Responsible for markdown parsing in the webapp views
gem 'kramdown'
# Send exceptions into Sentry from the app
gem 'sentry-raven'
# For memcached access
gem 'dalli'
gem 'rack-cache'
group :test do group :test do
gem 'rspec' gem 'rspec'
end end

View File

@ -9,6 +9,7 @@ GEM
addressable (2.5.1) addressable (2.5.1)
public_suffix (~> 2.0, >= 2.0.2) public_suffix (~> 2.0, >= 2.0.2)
concurrent-ruby (1.0.5) concurrent-ruby (1.0.5)
dalli (2.7.6)
diff-lcs (1.3) diff-lcs (1.3)
faraday (0.12.2) faraday (0.12.2)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
@ -25,6 +26,8 @@ GEM
public_suffix (2.0.5) public_suffix (2.0.5)
puma (3.10.0) puma (3.10.0)
rack (2.0.3) rack (2.0.3)
rack-cache (1.7.1)
rack (>= 0.4)
rack-protection (2.0.0) rack-protection (2.0.0)
rack rack
rspec (3.6.0) rspec (3.6.0)
@ -66,13 +69,15 @@ PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
dalli
haml haml
kramdown kramdown
puma puma
rack-cache
rspec rspec
sentry-raven sentry-raven
sinatra sinatra
warden-github warden-github
BUNDLED WITH BUNDLED WITH
1.15.3 1.16.0

View File

@ -1,9 +1,13 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require 'securerandom'
require 'yaml'
require 'dalli'
require 'haml' require 'haml'
require 'rack/session/dalli'
require 'sinatra/base' require 'sinatra/base'
require 'warden/github' require 'warden/github'
require 'yaml'
Haml::TempleEngine.disable_option_validator! Haml::TempleEngine.disable_option_validator!
@ -24,11 +28,24 @@ module CodeValet
include Warden::GitHub::SSO include Warden::GitHub::SSO
enable :sessions enable :sessions
set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex(64) }
enable :raise_errors enable :raise_errors
disable :show_exceptions
if ENV['PRODUCTION']
disable :show_exceptions
end
set :public_folder, File.dirname(__FILE__) + '/assets' set :public_folder, File.dirname(__FILE__) + '/assets'
configure do
if ENV['PRODUCTION'] || ENV['USE_MEMCACHED']
use Rack::Session::Dalli,
:namespace => 'webapp.sessions',
:cache => Dalli::Client.new(ENV.fetch('MEMCACHED_SERVER') { 'cache:11211' })
end
end
use Warden::Manager do |config| use Warden::Manager do |config|
config.failure_app = AuthFailre config.failure_app = AuthFailre
config.default_strategies :github config.default_strategies :github