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 +4 -4
- data/README.md +11 -0
- data/lib/firim/account_manager.rb +98 -0
- data/lib/firim/commands_generator.rb +50 -1
- data/lib/firim/detect_values.rb +8 -1
- data/lib/firim/options.rb +4 -0
- data/lib/firim/runner.rb +1 -1
- data/lib/firim/version.rb +1 -1
- data/lib/firim.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d0731d7d2b35bf81f320244a6a7c62a947f6a67
|
4
|
+
data.tar.gz: 5dbebf6ca5a24c7db39816a3ae229a1cc8caeede
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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/
|
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
|
data/lib/firim/detect_values.rb
CHANGED
@@ -34,7 +34,14 @@ module Firim
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def find_firim_api_token(options)
|
37
|
-
|
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['
|
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
data/lib/firim.rb
CHANGED
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.
|
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-
|
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
|