1 module OSDN; module CLI; module Command
4 logger.debug "Trying login"
5 scope = %w(profile group group_write)
7 auth_url = "https://#{OSDNClient.configure.host}/account/oauth2ui/authorize?client_id=#{CLI.client_id}&state=cli#{Time.now.to_i}&response_type=code&scope=#{scope.join('%20')}"
9 launch_brwoser auth_url
11 authcode = prompt("Type your auth code: ")
14 logger.error "Empty auth code, login has been canceled."
18 api = OSDNClient::DefaultApi.new
20 set_credential api.token(CLI.client_id, CLI.client_secret, code: authcode)
21 rescue OSDNClient::ApiError => e
23 err = JSON.parse(e.response_body)
24 logger.fatal err["error_description"]
26 logger.fatal "Failed to get access token"
32 def launch_brwoser(url)
33 puts "Access follwoing URL to get auth code;\n#{url}"
34 %w(/usr/bin/xdg-open /usr/bin/X11/xdg-open /usr/local/bin/xdg-open
35 /usr/bin/x-www-browser /usr/bin/firefox /usr/local/bin/firefox
37 File.executable?(bin) or next
38 exec(bin, url) if fork.nil?
42 when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
43 exec("start #{url}") if fork.nil?
45 exec("/usr/bin/open", url) if fork.nil?
49 def prompt(msg = "", newline = false)
51 msg += "\n" if newline
52 Readline.readline(msg, true).to_s.squeeze(" ").strip
60 "Login and save access token."