Class: Browserctl::Session
- Inherits:
-
Object
- Object
- Browserctl::Session
- 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
- .all ⇒ Object
- .delete(name) ⇒ Object
- .exist?(name) ⇒ Boolean
- .load(session_name) ⇒ Object
- .load_meta(path) ⇒ Object
- .path(name) ⇒ Object
- .save(session_name, metadata:, cookies:, local_storage:, session_storage:) ⇒ Object
- .validate_name!(name) ⇒ Object
Class Method Details
.all ⇒ Object
21 22 23 |
# File 'lib/browserctl/session.rb', line 21 def self.all Dir[File.join(BASE_DIR, "*/metadata.json")].filter_map { |f| (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
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.(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"), ) 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
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 |