
    )$j                        d Z ddlmZ ddlZddlZddlZddlZddlZddl	Zddl
mZ dZdZdZddZddZddZddZedk    r e e                      dS )zSmall helper for Kakao OAuth setup.

This does not store credentials. It prints an authorization URL or exchanges
the returned code for tokens.
    )annotationsN)	HTTPErrorz'https://kauth.kakao.com/oauth/authorizez#https://kauth.kakao.com/oauth/tokenzcodex-us-equity-kakaorest_api_keystrredirect_urireturnNonec                    t           j                            d| |dd          }t          t           d|            d S )Ncodetalk_message)response_type	client_idr   scope?)urllibparse	urlencodeprintAUTH_URL)r   r   querys      outputs/kakao_oauth_helper.pyprint_auth_urlr      sS    L""#%(#		
 	
 E 
X



         accountvaluec                   t          j        dddt          d| gddd           t          j        ddd	dt          d| d
|g	ddd          }|j        dk    r,t	          |j                                        pd|  d          d S )Nsecurityzdelete-generic-passwordz-sz-aFT)checkcapture_outputtextzadd-generic-passwordz-Uz-wr   zFailed to store z in Keychain.)
subprocessrunKEYCHAIN_SERVICE
returncode
SystemExitstderrstrip)r   r   results      r   set_keychain_secretr)   $   s    N	.6FgV	    ^"
	
   F  A,,..[2[W2[2[2[\\\ r   r   client_secret
str | Nonestore_keychainboolc           	         d| ||d}|r||d<   t           j                            |                              d          }t           j                            t          |d          }|                    dd           	 t           j                            |d	
          5 }t          j
        |                                                    d                    }	d d d            n# 1 swxY w Y   nU# t          $ rH}
|
                                                    dd          }t          d|
j         d|           d }
~
ww xY w|rt!          d|            d|	v rt!          d|	d                    |rt!          d|           t#          d           t#          dd                    t'          |	                                                                d S t#          t          j        |	dd                     d S )Nauthorization_code)
grant_typer   r   r   r*   zutf-8POST)datamethodzContent-Typez/application/x-www-form-urlencoded;charset=utf-8   )timeoutreplace)errorsz"Kakao token exchange failed: HTTP  KAKAO_REST_API_KEYrefresh_tokenKAKAO_REFRESH_TOKENKAKAO_CLIENT_SECRETz+Stored Kakao credentials in macOS Keychain.z
received: z, F   )ensure_asciiindent)r   r   r   encoderequestRequest	TOKEN_URL
add_headerurlopenjsonloadsreaddecoder   r%   r   r)   r   joinsortedkeysdumps)r   r   r   r*   r,   payloadencodedreqresponser(   excbodys               r   exchange_coderT   ?   sU    +!$	 G  1#0 l$$W--44W==G
.
 
 
 
H
HCNN>#TUUUQ^##C#44 	AZ 6 6w ? ?@@F	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A Q Q Qxxzz   ;;OchOOOOPPPQ  	@0,???f$$ 5vo7NOOO 	F 5}EEE;<<<=499VFKKMM%:%:;;==>>>>>djeA>>>?????s=   ?!C2  :C&C2 &C**C2 -C*.C2 2
E<AD??Eintc                 2   t          j                    } |                     dd          }|                    d          }|                    dd           |                    dd           |                    d          }|                    dd           |                    dd           |                    d	d
           |                    d           |                    dd           |                                 }|j        dk    rt          |j        |j	                   ni|j        dk    r^|j
        s+t          j        d                                          |_
        t          |j        |j	        |j
        |j        |j                   dS )NcommandT)destrequiredzauth-urlz--rest-api-key)rY   z--redirect-urizexchange-codez--codez6Authorization code. If omitted, prompted without echo.)helpz--client-secretz--store-keychain
store_true)actionzKakao authorization code: r   )argparseArgumentParseradd_subparsers
add_parseradd_argument
parse_argsrW   r   r   r   r   getpassr'   rT   r*   r,   )parser
subparsersauthtokenargss        r   mainri   d   s   $&&F&&I&EEJ  ,,D&666&666!!/22E	'$777	'$777	x&^___	()))	),???D|z!!t($*;<<<<		(	(y 	N(DEEKKMMDId'):DItGY[_[nooo1r   __main__)r   r   r   r   r   r	   )r   r   r   r   r   r	   )r   r   r   r   r   r   r*   r+   r,   r-   r   r	   )r   rU   )__doc__
__future__r   r]   rc   rF   r!   urllib.parser   urllib.requesturllib.errorr   r   rC   r#   r   r)   rT   ri   __name__r%    r   r   <module>rr      s
    # " " " " "                " " " " " " 51	* 	! 	! 	! 	!] ] ] ]6"@ "@ "@ "@J   2 z
*TTVV

 r   