class Fastlane::Actions::VerifyTwoStepSessionAction

Public Class Methods

authors() click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 88
def self.authors
  ["thasegaw"]
end
available_options() click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 79
def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :user,
                                 env_name: "FL_VERIFY_TWO_STEP_SESSION_USER",
                                 description: "User for Two-Step verification for Apple ID (email address)",
                                 optional: true)
  ]
end
category() click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 102
def self.category
  :misc
end
check_expiration_time(cookie) click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 40
def self.check_expiration_time(cookie)
  cookie.each do |content|
    next unless content.domain == 'idmsa.apple.com' && content.max_age.to_s.length > 0
    next unless content.created_at.to_s =~ /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/
    require 'time'
    time = Time.parse(content.created_at.to_s)
    created_date = time.getutc
    expiration_date = created_date + content.max_age
    remaining_sec = expiration_date - Time.now.utc
    remaining_hours = (remaining_sec / (60 * 60)).floor
    local_expiration_date = expiration_date.getlocal

    if remaining_hours >= 48
      remaining_days = remaining_hours / 24
      UI.important("Your session cookie will expire at #{local_expiration_date} (#{remaining_days} days left).")
    else
      UI.important("Your session cookie will expire at #{local_expiration_date} (#{remaining_hours} hours left).")
    end

    UI.error("Your session cookie is due to expire today!") if remaining_hours <= 24
    break
  end
end
description() click to toggle source

@!group Documentation

# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 68
def self.description
  "Verifies the session cookie for 'Two-Step verification for Apple ID'"
end
details() click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 72
def self.details
  [
    "This action will validate the session cookie for 'Two-Step verification for Apple ID'",
    "and display the remaining days until an expiration date."
  ].join(' ')
end
example_code() click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 96
def self.example_code
  [
    'verify_two_step_session(user: test@example.com)'
  ]
end
is_supported?(platform) click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 92
def self.is_supported?(platform)
  [:ios, :mac].include?(platform)
end
run(params) click to toggle source
# File lib/fastlane/plugin/verify_two_step_session/actions/verify_two_step_session_action.rb, line 4
def self.run(params)
  user = params[:user] || ENV["FASTLANE_USER"] || ENV["DELIVER_USER"] || ENV["DELIVER_USERNAME"]

  begin
    Spaceship::Tunes.login(user)
  rescue Spaceship::Client::InvalidUserCredentialsError => e
    # Invalid username and password combination
    UI.user_error!(e.message)
  rescue StandardError
    UI.user_error!('Your session cookie has been expired.')
  end

  UI.success('Login successful')

  cookie = nil
  if Spaceship::Tunes.client.load_session_from_file
    require 'yaml'
    cookie = YAML.safe_load(
      File.read(Spaceship::Tunes.client.persistent_cookie_path),
      [HTTP::Cookie, Time], # classes whitelist
      [],                   # symbols whitelist
      true                  # allow YAML aliases
    )
  end

  # If this is a CI, the user can pass the session via environment variable
  if Spaceship::Tunes.client.load_session_from_env
    cookie = Spaceship::Tunes.client.load_session_from_env
  end

  # user does not use 2 step verification
  return if cookie.nil?

  check_expiration_time(cookie)
end