Skip to content

Commit dfe827e

Browse files
committed
Merge branch 'logs_changes_am' into GR_remove_logs_redir
2 parents 78a1002 + 3f47da1 commit dfe827e

File tree

10 files changed

+420
-15
lines changed

10 files changed

+420
-15
lines changed

lib/travis/api/app/endpoint/logs.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ class Logs < Endpoint
99
resource = service(:find_log, id: params[:id]).run
1010
job = resource ? Job.find(resource.job_id) : nil
1111

12+
halt 404 unless job
13+
14+
repo = Travis::API::V3::Models::Repository.find(job.repository.id)
15+
repo_can_write = current_user ? !!repo.users.where(id: current_user.id, permissions: { push: true }).first : false
16+
17+
raise LogExpired if repo.user_settings.job_log_time_based_limit && job.started_at && job.started_at < Time.now - repo.user_settings.job_log_access_older_than_days.days
18+
raise LogAccessDenied if repo.user_settings.job_log_access_based_limit && !repo_can_write
19+
1220
if !resource || ((job.try(:private?) || !allow_public?) && !has_permission?(job))
1321
halt 404
1422
elsif resource.removed_at && accepts?('application/json')

lib/travis/api/v3/models/audit.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module Travis::API::V3
2+
class Models::Audit < Model
3+
belongs_to :owner, polymorphic: true
4+
belongs_to :source, polymorphic: true
5+
end
6+
end

lib/travis/api/v3/models/json_slice.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
module Travis::API::V3
44
class Models::JsonSlice
5-
include Virtus.model, Enumerable, Models::JsonSync, ActiveModel::Validations
5+
include Virtus.model, Enumerable, Models::JsonSync, ActiveModel::Validations, ActiveSupport::Callbacks, ActiveModel::Dirty
6+
extend ActiveSupport::Concern
7+
define_callbacks :after_save
68

79
class << self
810
attr_accessor :child_klass
@@ -30,14 +32,21 @@ def read(name)
3032

3133
def update(name, value)
3234
raise NotFound unless respond_to?(:"#{name}=")
35+
@changes = { :"#{name}" => { before: send(name), after: value } } unless value == send(name)
3336
send(:"#{name}=", value)
3437
raise UnprocessableEntity, errors.full_messages.to_sentence unless valid?
3538
sync!
39+
run_callbacks :after_save
40+
@changes = {}
3641
read(name)
3742
end
3843

3944
def to_h
4045
Hash[map { |x| [x.name, x.value] }]
4146
end
47+
48+
def changes
49+
@changes
50+
end
4251
end
4352
end

lib/travis/api/v3/models/user_settings.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ class Models::UserSettings < Models::JsonSlice
2020

2121
validate :job_log_access_older_than_days_restriction
2222

23+
set_callback :after_save, :after, :save_audit
24+
2325
attr_reader :repo
2426

27+
attr_accessor :user, :change_source
28+
2529
def initialize(repo, data)
2630
@repo = repo
2731
super(data)
@@ -75,5 +79,13 @@ def job_log_access_older_than_days_restriction
7579
errors.add(:job_log_access_older_than_days, "is outside the bounds")
7680
end
7781
end
82+
83+
private
84+
85+
def save_audit
86+
if self.change_source
87+
Travis::API::V3::Models::Audit.create!(owner: self.user, change_source: self.change_source, source: self.repo, source_changes: { settings: self.changes })
88+
end
89+
end
7890
end
7991
end

lib/travis/api/v3/queries/log.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
module Travis::API::V3
22
class Queries::Log < RemoteQuery
3-
def find_by_job_id(repo_can_write, job_id)
4-
find repo_can_write, Models::Job.find(job_id)
3+
def find_by_job_id(job_id)
4+
find Models::Job.find(job_id)
55
end
66

7-
def find(repo_can_write, job)
7+
def find(job)
88
@job = job
9-
raise LogExpired if !job.repository.user_settings.job_log_time_based_limit && job.started_at < Time.now - job.repository.user_settings.job_log_access_older_than_days.days
10-
raise LogAccessDenied if job.repository.user_settings.job_log_access_based_limit && !repo_can_write
11-
129
remote_log = Travis::RemoteLog::Remote.new(platform: platform).find_by_job_id(platform_job_id)
1310
raise EntityMissing, 'log not found'.freeze if remote_log.nil?
11+
1412
log = Travis::API::V3::Models::Log.new(remote_log: remote_log, job: job)
1513
# if the log has been archived, go to s3
1614
if log.archived?

lib/travis/api/v3/queries/user_setting.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ def find(repository)
66
repository.user_settings.read(_name)
77
end
88

9-
def update(repository)
10-
repository.user_settings.update(_name, _value)
9+
def update(repository, user, from_admin)
10+
user_settings = repository.user_settings
11+
user_settings.user = user
12+
user_settings.change_source = 'travis-api' unless from_admin
13+
user_settings.update(_name, _value)
1114
end
1215

1316
private

lib/travis/api/v3/services/log/find.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ def run!
66
job = Models::Job.find(params['job.id'])
77
repo_can_write = access_control.user ? !!job.repository.users.where(id: access_control.user.id, permissions: { push: true }).first : false
88

9-
log = query.find(repo_can_write, job)
9+
log = query.find(job)
1010
raise(NotFound, :log) unless access_control.visible? log
11+
raise LogExpired if job.repository.user_settings.job_log_time_based_limit && job.started_at && job.started_at < Time.now - job.repository.user_settings.job_log_access_older_than_days.days
12+
raise LogAccessDenied if job.repository.user_settings.job_log_access_based_limit && !repo_can_write
13+
1114
result log
1215
end
1316
end

lib/travis/api/v3/services/user_setting/update.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ def run!
99

1010
user_setting = query.find(repository)
1111
access_control.permissions(user_setting).write!
12+
app_id = Travis::Api::App::AccessToken.find_by_token(access_control.token).app_id
1213

13-
user_setting = query.update(repository)
14+
user_setting = query.update(repository, access_control.user, app_id == 2)
1415
result user_setting
1516
end
1617
end

0 commit comments

Comments
 (0)