Skip to content
Snippets Groups Projects
Commit 1afd2421 authored by Iain Bryson's avatar Iain Bryson
Browse files

Remove old dtu_auth.

Bump core to v0.9.
Add ability to run without redis.
parent 8001e85e
Branches
Tags
No related merge requests found
......@@ -6,12 +6,12 @@ GIT
activesupport
PATH
remote: ./dtu-auth2
remote: dtu-auth2
specs:
dtu-auth2 (0.0.0)
PATH
remote: ./dtu-file-management
remote: dtu-file-management
specs:
dtu-file-management (0.0.0)
......@@ -170,4 +170,4 @@ DEPENDENCIES
rubycas-client (~> 2.3.8)!
BUNDLED WITH
1.13.7
1.14.5
Gem::Specification.new do |s|
s.name = 'dtu-auth'
s.version = '0.0.0'
s.date = '2016-05-26'
s.summary = "Parsing of and authorization based on courses.yml and the groups and users yml files for DTU."
s.description = "This gem encapsulates the logic of reading in the identify files for DTU and provides an interface to enable apps to use that information to enforce authorization."
s.authors = ["Iain Bryson"]
s.email = 'iain@iain-bryson.ca'
s.files = ["lib/dtu_auth.rb"]
s.homepage =
'http://rubygems.org/'
s.license = 'MIT'
end
\ No newline at end of file
require 'active_model'
require 'awesome_print'
require 'models/course.rb'
require 'singleton'
module DTUAuth
def self.init(root = '/vol')
DTUAuth::AuthorizationManager.instance.load File.join(root, 'config')
end
class AuthorizationManager
include Singleton
attr_accessor :dtu_config_root
attr_accessor :courses
attr_accessor :users
attr_accessor :user_roles
attr_accessor :groups
def load(root)
@dtu_config_root = root
Rails.logger.debug "Initializing auth module"
Rails.logger.info "Using auth data from #{dtu_config_root}"
@courses = {}
@users = {}
@user_roles = {}
@groups = {}
am = self
_courses, users, user_roles = DTUAuth::Course.from_yml
_courses.each do |course|
am.courses[course._id] = course
end
Rails.logger.info "Loaded courses #{am.courses.ai}"
users.flatten.each do |user|
am.users[user._id] = user
end
user_roles.flatten.each do |role|
am.user_roles[role.user_id] = {} unless am.user_roles.has_key? role.user_id
am.groups[role.course_id] = [] unless am.groups.has_key? role.course_id
am.user_roles[role.user_id][role.course_id] = {} unless am.user_roles[role.user_id].has_key? role.course_id
am.user_roles[role.user_id][role.course_id][role.group] = [] unless am.user_roles[role.user_id][role.course_id].has_key? role.group
am.user_roles[role.user_id][role.course_id][role.group] << role
am.groups[role.course_id] << role.group
end
groups.each do |k,v|
groups[k] = v.uniq
end
# Rails.logger.debug "Users #{am.users.ai}"
# Rails.logger.debug "User Roles #{am.user_roles.ai}"
Rails.logger.info "Groups #{am.groups.ai}"
end
def self.find_user(user_id)
AuthorizationManager.instance.users[user_id]
end
def self.groups_for_course(course_id)
(AuthorizationManager.instance.groups[course_id] ? AuthorizationManager.instance.groups[course_id] : [])
end
end
end
require 'yaml'
require 'models/user.rb'
require 'models/user_role.rb'
module DTUAuth
class Course
include ActiveModel::Model
include ActiveModel::Serialization
attr_accessor :_id
attr_accessor :name
attr_accessor :enabled
attr_accessor :couchdb_url
attr_accessor :sharelatex
def self.from_yml(courses_filename = File.join(DTUAuth::AuthorizationManager.instance.dtu_config_root, 'courses.yaml'),
couchdb_filename = File.join(DTUAuth::AuthorizationManager.instance.dtu_config_root, 'couchdb.yaml'),
sharelatex_filename = File.join(DTUAuth::AuthorizationManager.instance.dtu_config_root, 'sharelatex.yaml') )
courses = []
users = []
user_roles = []
Rails.logger.info 'Initializing from'
Rails.logger.info "\tcampus dumper courses file: #{courses_filename.to_s} "
Rails.logger.info "\tcouchdb config file: #{couchdb_filename.to_s} "
Rails.logger.info "\tsharelatex config file: #{sharelatex_filename.to_s} "
@courses_filename = courses_filename
@couchdb_filename = couchdb_filename
@sharelatex_filename = sharelatex_filename
@course_map = YAML::load_file(@courses_filename)
@couchdb_map = YAML::load_file(@couchdb_filename)
@sharelatex_map = YAML::load_file(@sharelatex_filename)
admin_user = User.system_user()
Rails.logger.info("Courses info: #{@course_map}")
@course_map.each do |id, vals|
raise ArgumentError.new("course #{id} is missing couchdb configuration from #{@couchdb_filename}") unless @couchdb_map[id] and @couchdb_map[id]['db']
raise ArgumentError.new("course #{id} is missing sharelatex configuration from #{@sharelatex_filename}") unless @sharelatex_map[id]
Rails.logger.info 'Initializing course ' + id
course = DTUAuth::Course.new(_id: id, enabled: vals['enabled'], name: vals['name'], couchdb_url: @couchdb_map[id]['db'], sharelatex: @sharelatex_map[id])
courses << course
if vals['enabled']
users << User.from_yml(File.join(DTUAuth::AuthorizationManager.instance.dtu_config_root, vals['members']))
user_roles << UserRole.from_yml(File.join(DTUAuth::AuthorizationManager.instance.dtu_config_root, vals['groups']), id)
end
end
return courses, users, user_roles
end
end
end
require 'yaml'
module DTUAuth
class User
include ActiveModel::Model
include ActiveModel::Serialization
attr_accessor :_id
attr_accessor :full_name
attr_accessor :email
def self.from_yml(campus_dumper_filename)
Rails.logger.info("Loading users file #{campus_dumper_filename}")
campus_dumper = YAML::load_file(campus_dumper_filename)
users = campus_dumper.map do |id, vals|
User.new(_id: id, email: campus_dumper[id]['email'], full_name: campus_dumper[id]['name'])
end
users
end
def self.system_user
User.new(:_id => "dtu_quiz_system", :full_name => "DTU Quiz System", :email => "no@email.com")
end
end
end
require 'yaml'
module DTUAuth
class UserRole
include ActiveModel::Model
include ActiveModel::Serialization
ACL = %w(administrator author student)
attr_accessor :group
attr_accessor :acl
attr_accessor :user_id
attr_accessor :course_id
def self.from_yml(campus_dumper_filename, course_id)
Rails.logger.info("Loading groups file #{campus_dumper_filename}")
campus_dumper = YAML::load_file(campus_dumper_filename)
user_roles = campus_dumper.map do |id, vals|
vals.map do |user|
UserRole.new(group: id, user_id: user[0], course_id: course_id, acl: {"administrator" => :administrator, "user" => :student, "author" => :author}[user[1].downcase].to_s)
end
end
user_roles.flatten
end
validates :acl, :inclusion => {:in => ACL}
end
end
No preview for this file type
Gem::Specification.new do |s|
s.name = 'dtu-auth2'
s.version = '0.0.0'
s.version = '0.0.1'
s.date = '2016-05-26'
s.summary = "Parsing of and authorization based on courses.yml and the groups and users yml files for DTU backed by redis."
s.description = "This gem encapsulates the logic of reading in the identify files for DTU and provides an interface to enable apps to use that information to enforce authorization."
......
......@@ -48,10 +48,10 @@ module DTUAuth2
ap _courses
_courses.each do |course|
$redis.set("course$" + course._id, course.to_json)
$redis.set("course$" + course._id, course.to_json) if $redis
am.courses[course._id] = course
end
$redis.set("courses", courses.keys.to_json)
$redis.set("courses", courses.keys.to_json) if $redis
Rails.logger.info "Loaded courses #{am.courses.ai}"
......@@ -59,8 +59,8 @@ module DTUAuth2
am.users[user._id] = user
end
$redis.set("users", am.users.keys.to_json)
am.users.keys.each { |user_id| $redis.set("user$" + user_id, am.users[user_id].to_json) }
$redis.set("users", am.users.keys.to_json) if $redis
am.users.keys.each { |user_id| $redis.set("user$" + user_id, am.users[user_id].to_json) } if $redis
groups_by_user = {}
groups_by_course = {}
......@@ -88,17 +88,17 @@ module DTUAuth2
groups_by_user.each do |user_id, g|
$redis.set("user_role_by_user$" + user_id, g.uniq.to_json)
end
end if $redis
groups_by_course.each do |course_id, g|
$redis.set("user_role_by_course$" + course_id, g.to_json)
end
end if $redis
# Rails.logger.debug "Users #{am.users.ai}"
# Rails.logger.debug "User Roles #{am.user_roles.ai}"
Rails.logger.info "Groups #{am.groups.ai}"
$redis.set("$populated", true)
$redis.set("$populated", true) if $redis
end
def self.user_by_id(user_id)
......
......@@ -65,6 +65,7 @@ module DTUAuth2
raise ArgumentError.new("course #{id} is missing sharelatex configuration from #{@sharelatex_filename}") unless @sharelatex_map[id]
Rails.logger.info 'Initializing course ' + id
Rails.logger.info 'Initializing course ' + vals.ai
course = DTUAuth2::Course2.new(_id: id, enabled: vals['website_enabled'], name: vals['name'], couchdb_url: @couchdb_map[id]['db'], sharelatex: @sharelatex_map[id], populate_time: File.mtime(@courses_filename).to_i)
......
......@@ -38,7 +38,7 @@ module DTUAuth2
user_roles = user_roles.flatten
$redis.set("user_role_by_course$"+course_id, user_roles.to_json)
$redis.set("user_role_by_course$"+course_id, user_roles.to_json) if $redis
user_roles
end
......
File added
......@@ -6,7 +6,7 @@ require "dtu-core/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "dtu-core"
s.version = "0.0.8"
s.version = "0.0.9"
s.authors = ["Iain Bryson"]
s.email = ["iain@iain-bryson.ca"]
s.homepage = "https://github.com/dtu-compute/dtu-core.git"
......@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
s.test_files = Dir["test/**/*"]
s.add_dependency "rails", "~> 4.2.5"
s.add_dependency "dtu-auth"
s.add_dependency "dtu-auth2"
s.add_dependency "dtu-file-management"
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment