openproject-token 2.1.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d622e466da4e5bf9dab90d1ee1fcfac8757ce2a24fdc19a9c4b4be954081eaa1
4
- data.tar.gz: 7ddbec23cf11fb83e1177abf33a942418e009f45567c0015c56fb20b9cea1225
3
+ metadata.gz: c70ad73f805a38cc1846b8c5b1db6492efda10e039c0d417f41577ba4aa0c50d
4
+ data.tar.gz: ddc82e67199f997413a1493eef6518f238821eb5f995cf07d945b7fec95cb8b6
5
5
  SHA512:
6
- metadata.gz: 87d2219c37f2574e9c7651241e2c49af4f4928b7b84278bc1f92f97c8651142e414a68bdc3e2ce79e57b78df58b82d0c1b6fe6c2719b8889ae1374a5eadd29d3
7
- data.tar.gz: 4505d7dca7305c46cd76a7afa3435615f78413d89f60ed28f566c65acb0376fec0bc2adc95c43af09d4f3a73f42656fc6bd6ebbdbd3d08ae728ca31d3932c0d2
6
+ metadata.gz: abd224aeb838bac009ab74e4aa9d31c60891c4d860351c21e18d2bc52aaca39be0bbf008e304b58e842194234cf3e6070b9de2a59f6086fde577abdaaa84a773
7
+ data.tar.gz: eb3bb63292374c49f3d6cf39bebeb7584c64b91835107f520d995cebb4047e3e285f83481948b209e40e3364f85be909346f362540548fbe017665c47d932b47
@@ -1,5 +1,5 @@
1
1
  module OpenProject
2
2
  class Token
3
- VERSION = "2.1.3"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -51,6 +51,7 @@ module OpenProject
51
51
  attr_reader :version
52
52
  attr_accessor :subscriber, :mail, :company, :domain
53
53
  attr_accessor :starts_at, :issued_at, :expires_at
54
+ attr_accessor :reprieve_days
54
55
  attr_accessor :notify_admins_at, :notify_users_at, :block_changes_at
55
56
  attr_accessor :restrictions
56
57
 
@@ -90,8 +91,29 @@ module OpenProject
90
91
  self.block_changes_at
91
92
  end
92
93
 
93
- def expired?
94
- will_expire? && Date.today >= self.expires_at
94
+ ##
95
+ # Indicates whether or not the token has expired.
96
+ #
97
+ # This does include a reprieve (grace period) if configured.
98
+ # I.e. this will return false even if `expires_at` has passed
99
+ # if `reprieve_days` is configured, as long as the current date
100
+ # is still within those days after the actual expiration.
101
+ #
102
+ # @param reprieve [Boolean] Allow for reprieve (default true)
103
+ def expired?(reprieve: true)
104
+ offset = reprieve ? reprieve_days.to_i : 0
105
+
106
+ will_expire? && Date.today >= self.expires_at.next_day(offset)
107
+ end
108
+
109
+ ##
110
+ # Returns the number of days of reprieve left after the token has expired.
111
+ #
112
+ # @return Returns `nil` if the token hasn't expired yet or if no reprieve was given.
113
+ def reprieve_days_left
114
+ return nil unless reprieve_days.to_i > 0 && expired?(reprieve: false)
115
+
116
+ (self.expires_at.next_day(reprieve_days.to_i) - Date.today).to_i
95
117
  end
96
118
 
97
119
  def notify_admins?
@@ -111,6 +133,14 @@ module OpenProject
111
133
  version && Gem::Version.new(version) >= domain_required_from_version
112
134
  end
113
135
 
136
+ def valid_domain?(input)
137
+ if domain.is_a?(Regexp)
138
+ domain.match?(input)
139
+ else
140
+ domain == input
141
+ end
142
+ end
143
+
114
144
  def restricted?(key = nil)
115
145
  if key
116
146
  restricted? && restrictions.has_key?(key)
@@ -131,6 +161,7 @@ module OpenProject
131
161
  hash["issued_at"] = self.issued_at
132
162
  hash["starts_at"] = self.starts_at
133
163
  hash["expires_at"] = self.expires_at if self.will_expire?
164
+ hash["reprieve_days"] = self.reprieve_days if self.will_expire?
134
165
 
135
166
  hash["notify_admins_at"] = self.notify_admins_at if self.will_notify_admins?
136
167
  hash["notify_users_at"] = self.notify_users_at if self.will_notify_users?
@@ -160,7 +191,7 @@ module OpenProject
160
191
  @subscriber = attributes["subscriber"]
161
192
  @mail = attributes["mail"]
162
193
  @company = attributes["company"]
163
- @domain = attributes["domain"]
194
+ @domain = read_domain attributes["domain"]
164
195
 
165
196
  date_attribute_keys.each do |attr|
166
197
  value = attributes[attr]
@@ -171,6 +202,16 @@ module OpenProject
171
202
  send("#{attr}=", value)
172
203
  end
173
204
 
205
+ reprieve_days = attributes["reprieve_days"]
206
+
207
+ if will_expire?
208
+ if reprieve_days.nil? && apply_default_reprieve?(version)
209
+ @reprieve_days = 7
210
+ else
211
+ @reprieve_days = reprieve_days.to_i
212
+ end
213
+ end
214
+
174
215
  restrictions = attributes["restrictions"]
175
216
 
176
217
  if restrictions && restrictions.is_a?(Hash)
@@ -199,7 +240,9 @@ module OpenProject
199
240
  value = attr.include?("version") ? attr["version"] : current_gem_version.to_s
200
241
  version = nil
201
242
 
202
- if value.present? && value.to_s != "-1"
243
+ if value.to_s == "1"
244
+ version = 1
245
+ elsif value.present? && value.to_s != "-1"
203
246
  version = Gem::Version.new value
204
247
 
205
248
  if version > current_gem_version
@@ -210,6 +253,13 @@ module OpenProject
210
253
  version
211
254
  end
212
255
 
256
+ def read_domain(input)
257
+ return input if input.nil? || !(input.start_with?('/') && input.end_with?('/'))
258
+
259
+ # Omit the slashes of the input
260
+ Regexp.new input[1..-2]
261
+ end
262
+
213
263
  def date_attribute_keys
214
264
  %w(starts_at issued_at expires_at notify_admins_at notify_users_at block_changes_at)
215
265
  end
@@ -221,5 +271,13 @@ module OpenProject
221
271
  def domain_required_from_version
222
272
  @domain_required_from_version ||= Gem::Version.new('2.0')
223
273
  end
274
+
275
+ ##
276
+ # Reprieve was introduced in version 2.2.0 so could only be set
277
+ # during generation from then onwards. All tokens before that
278
+ # shall apply a default reprieve to be safe.
279
+ def apply_default_reprieve?(version)
280
+ Gem::Version.new(version) < Gem::Version.new("2.2.0")
281
+ end
224
282
  end
225
283
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openproject-token
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenProject GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-30 00:00:00.000000000 Z
11
+ date: 2023-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  requirements: []
87
- rubygems_version: 3.0.3
87
+ rubygems_version: 3.3.7
88
88
  signing_key:
89
89
  specification_version: 4
90
90
  summary: OpenProject EE token reader