firim 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d39d1821d49a34f9d7af9a64f19133cc57283e19
4
- data.tar.gz: d7d4320c0338a98b906f1862db9e846aec8ae6fd
3
+ metadata.gz: 3d0731d7d2b35bf81f320244a6a7c62a947f6a67
4
+ data.tar.gz: 5dbebf6ca5a24c7db39816a3ae229a1cc8caeede
5
5
  SHA512:
6
- metadata.gz: 383d4f5385981319ec76c884502ea01a5fe98eaee684ba59743522e87b53017b03600b3dd709ee8ce032102748d6137a4ab84d2be9753125d4f0e3c405caad8e
7
- data.tar.gz: f8debf65fddc3f2aec18dc090f1f29f8e68d3d360109e5fbed518017172845364b618d250817101557f9e5b259a3c1521ed37fe6a5470b5727406b2fa7101868
6
+ metadata.gz: 851d13bbbdcf11e988d82eb972d130fe9c13874abdd2ffe058ade87ab5967673d307c4aa709d165f0848c1a4c294d661a0b58a980b4df4363a7f708da1506a56
7
+ data.tar.gz: 3a3c9dbbf0e6f9c438aafe4ad5de0283e69f42e350de429fcade6a795d0130b8e0f8ae517df49b429d979ace458661d1127d5da3ed7fc3fb00574d3466fed3f7
data/README.md CHANGED
@@ -36,6 +36,17 @@ You can specify the app infomations in `Firimfile`, To get a list of available o
36
36
  Upload with icon ***NOTICE: Icon must be jpg format***
37
37
 
38
38
  firim -i [your_ipa_path] -l [your_icon_path]
39
+
40
+ # Assgin API Token
41
+
42
+ There are three ways to assgin Firim API Token
43
+
44
+ 1. Set `FIRIM_TOKEN` environment variables
45
+ 2. Add `token` to `macOS Keychain`
46
+ 3. Set in `Firimfile`
47
+
48
+ `Firim` will check the value from 1 to 3. Run `Firim` will add `token` to `keychain` in interactive shell. Also can use `firim addtoken` and `firim removetoken` to add or remove `token`.
49
+
39
50
 
40
51
  # Need help?
41
52
 
@@ -0,0 +1,98 @@
1
+ require 'security'
2
+ require 'highline/import' # to hide the entered password
3
+
4
+ module Firim
5
+ class AccountManager
6
+ DEFAULT_PREFIX = "firim"
7
+ DEFAULT_USERNAME = "default"
8
+ # @param prefix [String] Very optional, is used for the
9
+ # prefix on keychain
10
+ # @param note [String] An optional note that will be shown next
11
+ # to the token and token prompt
12
+ def initialize(user: nil, token: nil, prefix: nil, note: nil)
13
+ @prefix = prefix || DEFAULT_PREFIX
14
+
15
+ @user = user
16
+ @token = token
17
+ @note = note
18
+ end
19
+
20
+ # Is the prefix default prefix "firim"
21
+ def default_prefix?
22
+ @prefix == DEFAULT_PREFIX
23
+ end
24
+
25
+ def fetch_token_from_env
26
+ ENV["FIRIM_TOKEN"]
27
+ end
28
+
29
+ def token(ask_if_missing: true)
30
+ @token ||= fetch_token_from_env
31
+
32
+ unless @token
33
+ item = Security::InternetPassword.find(server: server_name)
34
+ @token ||= item.password if item
35
+ end
36
+ ask_for_token while ask_if_missing && @token.to_s.length == 0
37
+ return @token
38
+ end
39
+
40
+ def add_to_keychain
41
+ Security::InternetPassword.add(server_name, @user, token)
42
+ end
43
+
44
+ def remove_from_keychain
45
+ Security::InternetPassword.delete(server: server_name)
46
+ @token = nil
47
+ end
48
+
49
+ def server_name
50
+ "#{@prefix}.#{user_or_defualt}"
51
+ end
52
+
53
+ def user_or_defualt
54
+ if @user.to_s.length == 0
55
+ return DEFAULT_USERNAME
56
+ end
57
+ @user
58
+ end
59
+
60
+ def ask_for_token
61
+ puts "-------------------------------------------------------------------------------------".green
62
+ puts "Please provide your Firim Token".green
63
+ puts "The Token you enter will be stored in your macOS Keychain".green
64
+ if default_prefix?
65
+ # We don't want to show this message, if we ask for the application specific token
66
+ # which has a different prefix
67
+ puts "You can also pass the token using the `FIRIM_TOKEN` environment variable".green
68
+ end
69
+ puts "Or fill in Firimfile `firim_api_token`".green
70
+ puts "-------------------------------------------------------------------------------------".green
71
+
72
+ if @user.to_s.length == 0
73
+ raise "running in non-interactive shell" if $stdout.isatty == false
74
+ prompt_text = "Username(not necessary)"
75
+ prompt_text += " (#{@note})" if @note
76
+ prompt_text += ": "
77
+ @user = ask(prompt_text)
78
+ end
79
+
80
+ while @token.to_s.length == 0
81
+ raise "Missing Token for #{user_or_defualt}, and running in non-interactive shell" if $stdout.isatty == false
82
+ note = @note + " " if @note
83
+ @token = ask("Token (#{note}for #{user_or_defualt}): ") { |q| q.echo = "*" }
84
+ end
85
+
86
+ return true if (/darwin/ =~ RUBY_PLATFORM).nil? # mac?, since we don't have access to the helper here
87
+
88
+ # Now we store this information in the keychain
89
+ if add_to_keychain
90
+ return true
91
+ else
92
+ puts "Could not store token in keychain".red
93
+ return false
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -19,7 +19,7 @@ module Firim
19
19
  program :version, Firim::VERSION
20
20
  program :description, 'fir.im command tool'
21
21
  program :help, 'Author', 'Hailong Wang <whlsxl+g@gmail.com>'
22
- program :help, 'GitHub', 'https://github.com/fastlane/fastlane/tree/master/deliver'
22
+ program :help, 'GitHub', 'https://github.com/whlsxl/firim'
23
23
  program :help_formatter, :compact
24
24
 
25
25
  FastlaneCore::CommanderGenerator.new.generate(Firim::Options.available_options)
@@ -60,9 +60,58 @@ module Firim
60
60
  end
61
61
  end
62
62
 
63
+ command :addtoken do |c|
64
+ c.syntax = 'firim addtoken'
65
+ c.description = 'Add a firim api token to keychain. username is not necessary, Just a sign for multiple api token.'
66
+
67
+ c.option '--username username', String, 'Username to add(not necessary).'
68
+ c.option '--token token', String, 'API token to add'
69
+
70
+ c.action do |args, options|
71
+ username = options.username || ask('Username(not necessary): ')
72
+ token = options.token || ask('Password: ') { |q| q.echo = '*'}
73
+
74
+ add(username, token)
75
+
76
+ puts "Token #{username || '`default`'}: #{'*' * token.length} added to keychain."
77
+ end
78
+ end
79
+
80
+ # Command to remove credential from Keychain
81
+ command :removetoken do |c|
82
+ c.syntax = 'firim removetoken'
83
+ c.description = 'Removes a firim token from the keychain.'
84
+
85
+ c.option '--username username', String, 'Username to remove(or default).'
86
+
87
+ c.action do |args, options|
88
+ username = options.username || ask('Username: ')
89
+
90
+ remove(username)
91
+ end
92
+ end
93
+
63
94
  default_command :run
64
95
 
65
96
  run!
66
97
  end
98
+
99
+
100
+ private
101
+
102
+ # Add entry to Apple Keychain
103
+ def add(username, token)
104
+ Firim::AccountManager.new(
105
+ user: username,
106
+ token: token
107
+ ).add_to_keychain
108
+ end
109
+
110
+ # Remove entry from Apple Keychain using AccountManager
111
+ def remove(username)
112
+ Firim::AccountManager.new(
113
+ user: username
114
+ ).remove_from_keychain
115
+ end
67
116
  end
68
117
  end
@@ -34,7 +34,14 @@ module Firim
34
34
  end
35
35
 
36
36
  def find_firim_api_token(options)
37
- return if options[:firim_api_token]
37
+ option_token = options[:firim_api_token]
38
+ keychain_token = Firim::AccountManager.new(user: options[:firim_username])
39
+ token = keychain_token.token(ask_if_missing: option_token == nil)
40
+ if token
41
+ options[:firim_api_token] = token
42
+ return
43
+ end
44
+
38
45
  options[:firim_api_token] ||= UI.input("The API Token of fir.im: ")
39
46
  end
40
47
  end
data/lib/firim/options.rb CHANGED
@@ -8,7 +8,11 @@ module Firim
8
8
  # firim info
9
9
  FastlaneCore::ConfigItem.new(key: :firim_api_token,
10
10
  short_option: "-a",
11
+ optional: true,
11
12
  description: "fir.im user api token"),
13
+ FastlaneCore::ConfigItem.new(key: :firim_username,
14
+ optional: true,
15
+ description: "fir.im username, a sign for identify different token"),
12
16
 
13
17
  # Content path
14
18
  FastlaneCore::ConfigItem.new(key: :ipa,
data/lib/firim/runner.rb CHANGED
@@ -51,7 +51,7 @@ module Firim
51
51
  end
52
52
 
53
53
  def validation_response response_data
54
- error_code = response_data['errors']['code'].to_int rescue 0
54
+ error_code = response_data['code'].to_i rescue 0
55
55
  if error_code == 100020
56
56
  UI.user_error!("Firim API Token(#{options[:firim_api_token]}) not correct")
57
57
  end
data/lib/firim/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Firim
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/firim.rb CHANGED
@@ -4,6 +4,7 @@ require 'firim/options'
4
4
  require 'firim/runner'
5
5
  require 'firim/setup'
6
6
  require "firim/version"
7
+ require "firim/account_manager"
7
8
 
8
9
  require 'fastlane_core'
9
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - whlsxl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-11 00:00:00.000000000 Z
11
+ date: 2017-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane
@@ -114,6 +114,7 @@ files:
114
114
  - bin/firim
115
115
  - lib/assets/FirimfileDefault
116
116
  - lib/firim.rb
117
+ - lib/firim/account_manager.rb
117
118
  - lib/firim/commands_generator.rb
118
119
  - lib/firim/detect_values.rb
119
120
  - lib/firim/options.rb