47 lines
915 B
Ruby
47 lines
915 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'json'
|
|
|
|
module Gitlab
|
|
class ChatNameToken
|
|
attr_reader :token
|
|
|
|
TOKEN_LENGTH = 50
|
|
EXPIRY_TIME = 10.minutes
|
|
|
|
def initialize(token = new_token)
|
|
@token = token
|
|
end
|
|
|
|
def get
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
data = redis.get(redis_shared_state_key)
|
|
Gitlab::Json.parse(data, symbolize_names: true) if data
|
|
end
|
|
end
|
|
|
|
def store!(params)
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
params = params.to_json
|
|
redis.set(redis_shared_state_key, params, ex: EXPIRY_TIME)
|
|
token
|
|
end
|
|
end
|
|
|
|
def delete
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
redis.del(redis_shared_state_key)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def new_token
|
|
Devise.friendly_token(TOKEN_LENGTH)
|
|
end
|
|
|
|
def redis_shared_state_key
|
|
"gitlab:chat_names:#{token}"
|
|
end
|
|
end
|
|
end
|