@@ -5,15 +5,15 @@ module Identity
5
5
6
6
USERNAME_REGEX = /\A ([a-zA-Z0-9_]{1,16}|[0-9a-f]{24})\z /
7
7
USERNAME_NORMALIZED_REGEX = /\A ([a-z0-9_]{1,16}|[0-9a-f]{24})\z /
8
- UUID_REGEX = /\A [0-9a-f]{32 }\z /
8
+ UUID_REGEX = /\A [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12 }\z /
9
9
PLAYER_ID_REGEX = /\A ([a-zA-Z0-9_ ]{1,16}|_[0-9a-f]{24})\z / # some old usernames have spaces
10
10
11
11
class MojangUuidValidator < ActiveModel ::EachValidator
12
12
def validate_each ( user , attr , uuid )
13
13
if uuid !~ UUID_REGEX
14
14
user . errors . add ( attr , "is not a valid UUID" )
15
15
else
16
- v = UUIDTools ::UUID . parse_hexdigest ( uuid ) . version
16
+ v = UUIDTools ::UUID . parse ( uuid ) . version
17
17
v == 4 or user . errors . add ( attr , "must be version 4 (was version #{ v } )" )
18
18
end
19
19
end
@@ -144,14 +144,19 @@ def with_past_username(username)
144
144
145
145
def normalize_uuid ( uuid )
146
146
if uuid . is_a? UUIDTools ::UUID
147
- uuid . hexdigest
148
- elsif uuid
149
- uuid . gsub ( /-/ , '' ) . downcase
147
+ uuid . to_s
148
+ elsif uuid =~ /\A \h {8}-\h {4}-\h {4}-\h {4}-\h {12}\z /
149
+ uuid . downcase
150
+ elsif uuid =~ /\A (\h {8})(\h {4})(\h {4})(\h {4})(\h {12})\z /
151
+ "#{ $1} -#{ $2} -#{ $3} -#{ $4} -#{ $5} " . downcase
152
+ else
153
+ # Validation will catch it
154
+ uuid
150
155
end
151
156
end
152
157
153
158
def uuid_invalid_reason ( uuid )
154
- unless UUIDTools ::UUID . parse_hexdigest ( uuid ) . version == 4
159
+ unless UUIDTools ::UUID . parse ( uuid ) . version == 4
155
160
"Not a v4 UUID (probably generated for an offline login)"
156
161
end
157
162
end
@@ -190,7 +195,7 @@ def has_uuid?(uuid)
190
195
end
191
196
192
197
def uuid_obj
193
- UUIDTools ::UUID . parse_hexdigest ( self . uuid )
198
+ UUIDTools ::UUID . parse ( self . uuid )
194
199
end
195
200
196
201
# The API client can deserialize this into a tc.oc.api.PlayerId
0 commit comments