Create a gist now

Instantly share code, notes, and snippets.

@troelskn /app.rb forked from dstrelau/app.rb
Last active Aug 26, 2017

What would you like to do?
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
@ghost

This comment has been minimized.

Show comment Hide comment
@ghost

ghost Jan 19, 2013

Hi

I would like to use this, but I have no idea how to. Can you please explain what I need to do to add this to my gollum install. Thanks

ghost commented Jan 19, 2013

Hi

I would like to use this, but I have no idea how to. Can you please explain what I need to do to add this to my gollum install. Thanks

@troelskn

This comment has been minimized.

Show comment Hide comment
@troelskn

troelskn Jan 21, 2013

This just extends Gollum. So make sure you have that up and running first. I think requirements are low - Try to run gem install gollum (Assuming you have installed Ruby + rubygems).

Launch Gollum by running serve.sh. You might want to wrap this in something that makes sure to relaunch the service, if it fails as well as on machine boot. Also, if you want to expose this to the internet at large, I suggest that you put nginx+mod_cache in front of it. Google for plenty of descriptions on how.

Owner

troelskn commented Jan 21, 2013

This just extends Gollum. So make sure you have that up and running first. I think requirements are low - Try to run gem install gollum (Assuming you have installed Ruby + rubygems).

Launch Gollum by running serve.sh. You might want to wrap this in something that makes sure to relaunch the service, if it fails as well as on machine boot. Also, if you want to expose this to the internet at large, I suggest that you put nginx+mod_cache in front of it. Google for plenty of descriptions on how.

@void-main

This comment has been minimized.

Show comment Hide comment
@void-main

void-main May 26, 2014

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

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

This comment has been minimized.

Show comment Hide comment
@blackhuman

blackhuman Aug 27, 2014

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".

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

This comment has been minimized.

Show comment Hide comment
@blackhuman

blackhuman Aug 27, 2014

sorry, i has found it, just sha1sum.

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