Skip to content

Commit

Permalink
standardized foreign key column names for pgt/tgt/st associations; un…
Browse files Browse the repository at this point in the history
…tangled relationship dependence issues
  • Loading branch information
zuk committed May 6, 2009
1 parent a9d6a90 commit cd7bd47
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 13 deletions.
6 changes: 3 additions & 3 deletions lib/casserver/cas.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def generate_service_ticket(service, username, tgt)
st.ticket = "ST-" + CASServer::Utils.random_string
st.service = service
st.username = username
st.ticket_granting_ticket = tgt
st.granted_by_tgt_id = tgt.id
st.client_hostname = @env['HTTP_X_FORWARDED_FOR'] || @env['REMOTE_HOST'] || @env['REMOTE_ADDR']
st.save!
$LOG.debug("Generated service ticket '#{st.ticket}' for service '#{st.service}'" +
Expand All @@ -59,8 +59,8 @@ def generate_proxy_ticket(target_service, pgt)
pt.ticket = "PT-" + CASServer::Utils.random_string
pt.service = target_service
pt.username = pgt.service_ticket.username
pt.proxy_granting_ticket_id = pgt.id
pt.ticket_granting_ticket = pgt.service_ticket.ticket_granting_ticket
pt.granted_by_pgt_id = pgt.id
pt.granted_by_tgt_id = pgt.service_ticket.granted_by_tgt.id
pt.client_hostname = @env['HTTP_X_FORWARDED_FOR'] || @env['REMOTE_HOST'] || @env['REMOTE_ADDR']
pt.save!
$LOG.debug("Generated proxy ticket '#{pt.ticket}' for target service '#{pt.service}'" +
Expand Down
8 changes: 4 additions & 4 deletions lib/casserver/controllers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def get

if $CONF.enable_single_sign_out
$LOG.debug("Deleting Service/Proxy Tickets for '#{tgt}' for user '#{tgt.username}'")
tgt.service_tickets.each do |st|
tgt.granted_service_tickets.each do |st|
send_logout_notification_for_service_ticket(st)
# TODO: Maybe we should do some special handling if send_logout_notification_for_service_ticket fails?
# (the above method returns false if the POST results in a non-200 HTTP response).
Expand Down Expand Up @@ -322,7 +322,7 @@ def get
pgt = generate_proxy_granting_ticket(@pgt_url, st)
@pgtiou = pgt.iou if pgt
end
@extra_attributes = st.ticket_granting_ticket.extra_attributes || {}
@extra_attributes = st.granted_by_tgt.extra_attributes || {}
end

@status = CASServer::Controllers.response_status_from_error(@error) if @error
Expand Down Expand Up @@ -356,15 +356,15 @@ def get
@username = t.username

if t.kind_of? CASServer::Models::ProxyTicket
@proxies << t.proxy_granting_ticket.service_ticket.service
@proxies << t.granted_by_pgt.service_ticket.service
end

if @pgt_url
pgt = generate_proxy_granting_ticket(@pgt_url, t)
@pgtiou = pgt.iou if pgt
end

@extra_attributes = t.ticket_granting_ticket.extra_attributes || {}
@extra_attributes = t.granted_by_tgt.extra_attributes || {}
end

@status = CASServer::Controllers.response_status_from_error(@error) if @error
Expand Down
32 changes: 28 additions & 4 deletions lib/casserver/models.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ class ServiceTicket < Ticket
set_table_name 'casserver_st'
include Consumable

belongs_to :ticket_granting_ticket, :foreign_key => :tgt_id
belongs_to :granted_by_tgt,
:class_name => 'CASServer::Models::TicketGrantingTicket',
:foreign_key => :granted_by_tgt_id
has_one :proxy_granting_ticket,
:foreign_key => :created_by_st_id

def matches_service?(service)
CASServer::CAS.clean_service_url(self.service) ==
Expand All @@ -45,21 +49,29 @@ def matches_service?(service)
end

class ProxyTicket < ServiceTicket
belongs_to :proxy_granting_ticket
has_one :granted_by_pgt,
:class_name => 'CASServer::Models::ProxyGrantingTicket',
:foreign_key => :granted_by_pgt_id
end

class TicketGrantingTicket < Ticket
set_table_name 'casserver_tgt'

serialize :extra_attributes

has_many :service_tickets, :foreign_key => :tgt_id
has_many :granted_service_tickets,
:class_name => 'CASServer::Models::ServiceTicket',
:foreign_key => :granted_by_tgt_id,
:dependent => :destroy
end

class ProxyGrantingTicket < Ticket
set_table_name 'casserver_pgt'
belongs_to :service_ticket
has_many :proxy_tickets, :dependent => :destroy
has_many :granted_proxy_tickets,
:class_name => 'CASServer::Models::ProxyTicket',
:foreign_key => :granted_by_pgt_id,
:dependent => :destroy
end

class Error
Expand Down Expand Up @@ -220,4 +232,16 @@ def self.down
remove_column :casserver_tgt, :extra_attributes
end
end

class RenamePgtForeignKeys < V 0.80
def self.up
rename_column :casserver_st, :proxy_granting_ticket_id, :granted_by_pgt_id
rename_column :casserver_st, :tgt_id, :granted_by_tgt_id
end

def self.down
rename_column :casserver_st, :granted_by_pgt_id, :proxy_granting_ticket_id
rename_column :casserver_st, :granted_by_tgt_id, :tgt_id
end
end
end
4 changes: 2 additions & 2 deletions rubycas-server.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

Gem::Specification.new do |s|
s.name = %q{rubycas-server}
s.version = "0.8.0.20090430"
s.version = "0.8.0.20090506"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Matt Zukowski"]
s.date = %q{2009-04-27}
s.date = %q{2009-05-06}
s.description = %q{Provides single sign-on authentication for web applications using the CAS protocol.}
s.email = ["matt@zukowski.ca"]
s.executables = ["rubycas-server", "rubycas-server-ctl"]
Expand Down
Empty file removed tmp/foo
Empty file.

0 comments on commit cd7bd47

Please sign in to comment.