firim 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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