Skip to content

Instantly share code, notes, and snippets.

@troelskn
Forked from dstrelau/app.rb
Last active August 12, 2021 17:25
Show Gist options
  • Star 49 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save troelskn/2224709 to your computer and use it in GitHub Desktop.
Save troelskn/2224709 to your computer and use it in GitHub Desktop.
Gollum protected by HTTP Basic
require 'gollum/frontend/app'
require 'digest/sha1'
class App < Precious::App
User = Struct.new(:name, :email, :password_hash, :can_write)
before { authenticate! }
before /^\/(edit|create|delete|livepreview|revert)/ do authorize_write! ; end
helpers do
def authenticate!
@_auth ||= Rack::Auth::Basic::Request.new(request.env)
if @_auth.provided?
end
if @_auth.provided? && @_auth.basic? && @_auth.credentials &&
@user = detected_user(@_auth.credentials)
return @user
else
response['WWW-Authenticate'] = %(Basic realm="Gollum Wiki")
throw(:halt, [401, "Not authorized\n"])
end
end
def authorize_write!
throw(:halt, [403, "Forbidden\n"]) unless @user.can_write
end
def users
@_users ||= settings.authorized_users.map {|u| User.new(*u) }
end
def detected_user(credentials)
users.detect do |u|
[u.email, u.password_hash] ==
[credentials[0], Digest::SHA1.hexdigest(credentials[1])]
end
end
end
def commit_message
{
:message => params[:message],
:name => @user.name,
:email => @user.email
}
end
end
__DIR__ = File.expand_path(File.dirname(__FILE__))
$: << __DIR__
require 'rubygems'
require 'yaml'
require 'app'
App.set(:gollum_path, __DIR__ + "/wikidata")
App.set(:authorized_users, YAML.load_file(File.expand_path('users.yml', __DIR__)))
App.set(:wiki_options, {})
run App
#!/bin/bash
# kill any running gollums
ps -ef | grep rackup | grep -v grep | awk '{print $2}' | xargs kill -9
# start gollum as a background process
# you can pipe output to /dev/null instead, if you don't want a log
nohup rackup -p 4567 config.ru > /var/log/gollum.log &
---
- - User Name
- user@example.com
- e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4 # secret
- true
- - Another User
- another@example.com
- b4341ce88a4943631b9573d9e0e5b28991de945d # p455w0rd
- true
@void-main
Copy link

For the latest version of gollum (>= 2.4.15), the first line of requirement should be require "gollum/app" instead of require 'gollum/frontend/app'

Reference: this blog

@blackhuman
Copy link

Hi, how could i get the encoded password string, i had tried md5 and sha1 to encode string "secret", but i can not get the same string as "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4".

@blackhuman
Copy link

sorry, i has found it, just sha1sum.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment