Class: Browserctl::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/browserctl/session.rb

Constant Summary collapse

BASE_DIR =
File.join(BROWSERCTL_DIR, "sessions")
SAFE_NAME =
/\A[a-zA-Z0-9_-]{1,64}\z/

Class Method Summary collapse

Class Method Details

.allObject



21
22
23
# File 'lib/browserctl/session.rb', line 21

def self.all
  Dir[File.join(BASE_DIR, "*/metadata.json")].filter_map { |f| load_meta(f) }
end

.delete(name) ⇒ Object



16
17
18
19
# File 'lib/browserctl/session.rb', line 16

def self.delete(name)
  validate_name!(name)
  FileUtils.rm_rf(path(name))
end

.exist?(name) ⇒ Boolean

Returns:

  • (Boolean)


14
# File 'lib/browserctl/session.rb', line 14

def self.exist?(name)  = Dir.exist?(path(name))

.load(session_name) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/browserctl/session.rb', line 37

def self.load(session_name)
  validate_name!(session_name)
  dir = path(session_name)
  raise "session '#{session_name}' not found" unless Dir.exist?(dir)

  {
    metadata: JSON.parse(File.read(File.join(dir, "metadata.json")), symbolize_names: true),
    cookies: JSON.parse(File.read(File.join(dir, "cookies.json")), symbolize_names: true),
    local_storage: JSON.parse(File.read(File.join(dir, "local_storage.json")), symbolize_names: false),
    session_storage: load_session_storage(dir)
  }
end

.load_meta(path) ⇒ Object



50
51
52
53
54
# File 'lib/browserctl/session.rb', line 50

def self.load_meta(path)
  JSON.parse(File.read(path), symbolize_names: true)
rescue JSON::ParserError
  nil
end

.path(name) ⇒ Object



13
# File 'lib/browserctl/session.rb', line 13

def self.path(name)    = File.join(BASE_DIR, name)

.save(session_name, metadata:, cookies:, local_storage:, session_storage:) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/browserctl/session.rb', line 25

def self.save(session_name, metadata:, cookies:, local_storage:, session_storage:)
  validate_name!(session_name)
  dir = path(session_name)
  FileUtils.mkdir_p(dir)
  write_json(File.join(dir, "metadata.json"),     )
  write_secret(File.join(dir, "cookies.json"),    cookies)
  write_secret(File.join(dir, "local_storage.json"), local_storage)
  return if session_storage.empty?

  write_secret(File.join(dir, "session_storage.json"), session_storage)
end

.validate_name!(name) ⇒ Object

Raises:

  • (ArgumentError)


56
57
58
59
60
# File 'lib/browserctl/session.rb', line 56

def self.validate_name!(name)
  return if SAFE_NAME.match?(name.to_s)

  raise ArgumentError, "invalid session name #{name.inspect} — use letters, digits, _ or - (max 64 chars)"
end