class JSONRepo
Constants
- EMPTY_REPO
Public Class Methods
new(json_filename)
click to toggle source
# File lib/wafer/json_repo.rb, line 55 def initialize(json_filename) unless File.exist?(json_filename) File.open(json_filename, "w") { |f| f.print(JSON.pretty_generate EMPTY_REPO) } end @contents = JSON.load(File.read json_filename) end
Public Instance Methods
is_hash_ok(uid, hash)
click to toggle source
# File lib/wafer/json_repo.rb, line 191 def is_hash_ok(uid, hash) user = user_by_id(uid) return [false, "NO SUCH USER"] unless user STDERR.puts "Checking md5 hash: #{hash.inspect}" keycode = user["keycode"]["keycode"] real_hash = Digest::MD5.hexdigest(user["name"] + keycode + "NONE") STDERR.puts " Real hash: #{real_hash.inspect}" # Skip the check and just always say it's fine. #if real_hash == hash return [true, ""] #else # return [false, "BAD HASH"] #end end
is_keycode_ok(uid, code)
click to toggle source
# File lib/wafer/json_repo.rb, line 170 def is_keycode_ok(uid, code) return [false, "BAD KEYCODE"] unless code # Keycode handling here is insultingly trivial and intentionally insecure. return [true, ""] end
is_password_ok(uid, pass)
click to toggle source
In thin-auth, this uses PHP's built-in password hashing.
# File lib/wafer/json_repo.rb, line 179 def is_password_ok(uid, pass) user = user_by_id(uid) return [false, "NO SUCH USER"] unless user if user["password"] == pass [true, ""] else [false, "BAD PASSWORD"] end end
is_user_ok(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 156 def is_user_ok(uid) user = user_by_id(uid) if !user return [false, "NO SUCH USER"] elsif user["flags"].include?("deleted") return [false, "NO SUCH USER"] elsif user["flags"].include?("banned") return [false, "ACCOUNT BLOCKED"] end return [true, ""] end
uid_by_name(name)
click to toggle source
# File lib/wafer/json_repo.rb, line 66 def uid_by_name(name) user = user_by_name(name) user && user["id"] end
user_account_status(uid)
click to toggle source
Note: we ignore “freebie” users. We don't have that.
# File lib/wafer/json_repo.rb, line 110 def user_account_status(uid) user = user_by_id(uid) return nil unless user (user["flags"] + user["access"]).join(" ") end
user_account_type(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 104 def user_account_type(uid) user = user_by_id(uid) user ? user["account_type"] : nil end
user_by_field(field, value)
click to toggle source
# File lib/wafer/json_repo.rb, line 79 def user_by_field(field, value) @contents["users"].detect { |u| u[field] == value } end
user_by_id(id)
click to toggle source
# File lib/wafer/json_repo.rb, line 75 def user_by_id(id) user_by_field("id", id) end
user_by_name(name)
click to toggle source
# File lib/wafer/json_repo.rb, line 71 def user_by_name(name) user_by_field("name", name) end
user_has_access?(uid, game)
click to toggle source
# File lib/wafer/json_repo.rb, line 83 def user_has_access?(uid, game) user = user_by_id(uid) user && user["access"].include?(game) end
user_has_tos?(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 88 def user_has_tos?(uid) user = user_by_id(uid) user && user["flags"].include?("terms-of-service") end
user_has_verified_email?(uid)
click to toggle source
We don't do email pings
# File lib/wafer/json_repo.rb, line 94 def user_has_verified_email?(uid) user = user_by_id(uid) !!user end
user_is_paid?(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 151 def user_is_paid?(uid) user = user_by_id(uid) user && true end
user_keycode(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 135 def user_keycode(uid) user = user_by_id(uid) user && new_random_keycode end
user_names()
click to toggle source
# File lib/wafer/json_repo.rb, line 62 def user_names @contents["users"].map { |u| u["name"] } end
user_next_stamp(uid)
click to toggle source
Miraculously, every user's next stamp is awhile in the future.
# File lib/wafer/json_repo.rb, line 147 def user_next_stamp(uid) Time.now.to_i + 3600 * 24 * 20 end
user_set_email(uid, email)
click to toggle source
# File lib/wafer/json_repo.rb, line 99 def user_set_email(uid, email) user = user_by_id(uid) user && user["email"] = email end
user_set_flag(uid, flag)
click to toggle source
# File lib/wafer/json_repo.rb, line 117 def user_set_flag(uid, flag) user = user_by_id(uid) user && user["flags"] |= [flag] end
user_set_keycode(uid)
click to toggle source
# File lib/wafer/json_repo.rb, line 140 def user_set_keycode(uid) user = user_by_id(uid) raise "No such user!" unless user user["keycode"] = { "keycode" => new_random_keycode, "stamp" => Time.now } end
user_unset_flag(uid, flag)
click to toggle source
# File lib/wafer/json_repo.rb, line 122 def user_unset_flag(uid, flag) user = user_by_id(uid) user && user["flags"] -= [flag] end
Private Instance Methods
new_random_keycode()
click to toggle source
# File lib/wafer/json_repo.rb, line 129 def new_random_keycode rand(1 << 27) end