From 746cb70caf072aeee5da3aaadc06604080e7da2d Mon Sep 17 00:00:00 2001 From: Carl Lundin Date: Wed, 7 Jun 2023 12:53:52 -0700 Subject: [PATCH 1/3] feat: Add public API load_credentials_from_dict to allow creating a default credential object from a dictionary. This resolves https://github.com/googleapis/google-auth-library-python/issues/1313. --- google/auth/__init__.py | 8 +++++-- google/auth/_default.py | 44 +++++++++++++++++++++++++++++++++++ system_tests/secrets.tar.enc | Bin 10324 -> 10324 bytes tests/test__default.py | 14 +++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/google/auth/__init__.py b/google/auth/__init__.py index 861abe7ea..5b3d734aa 100644 --- a/google/auth/__init__.py +++ b/google/auth/__init__.py @@ -17,13 +17,17 @@ import logging from google.auth import version as google_auth_version -from google.auth._default import default, load_credentials_from_file +from google.auth._default import ( + default, + load_credentials_from_file, + load_credentials_from_dict, +) __version__ = google_auth_version.__version__ -__all__ = ["default", "load_credentials_from_file"] +__all__ = ["default", "load_credentials_from_file", "load_credentials_from_dict"] # Set default logging handler to avoid "No handler found" warnings. logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/google/auth/_default.py b/google/auth/_default.py index 4effeec9e..1ae26b4eb 100644 --- a/google/auth/_default.py +++ b/google/auth/_default.py @@ -130,6 +130,50 @@ def load_credentials_from_file( ) +def load_credentials_from_dict( + info, scopes=None, default_scopes=None, quota_project_id=None, request=None +): + """Loads Google credentials from a dict. + + The credentials file must be a service account key, stored authorized + user credentials, external account credentials, or impersonated service + account credentials. + + Args: + info (Dict[str, Any]): A dict object containing the credentials + scopes (Optional[Sequence[str]]): The list of scopes for the credentials. If + specified, the credentials will automatically be scoped if + necessary + default_scopes (Optional[Sequence[str]]): Default scopes passed by a + Google client library. Use 'scopes' for user-defined scopes. + quota_project_id (Optional[str]): The project ID used for + quota and billing. + request (Optional[google.auth.transport.Request]): An object used to make + HTTP requests. This is used to determine the associated project ID + for a workload identity pool resource (external account credentials). + If not specified, then it will use a + google.auth.transport.requests.Request client to make requests. + + Returns: + Tuple[google.auth.credentials.Credentials, Optional[str]]: Loaded + credentials and the project ID. Authorized user credentials do not + have the project ID information. External account credentials project + IDs may not always be determined. + + Raises: + google.auth.exceptions.DefaultCredentialsError: if the file is in the + wrong format or is missing. + """ + if not isinstance(info, dict): + raise exceptions.DefaultCredentialsError( + "info object was of type {} but dict type was expected.".format(type(info)) + ) + + return _load_credentials_from_info( + "dict object", info, scopes, default_scopes, quota_project_id, request + ) + + def _load_credentials_from_info( filename, info, scopes, default_scopes, quota_project_id, request ): diff --git a/system_tests/secrets.tar.enc b/system_tests/secrets.tar.enc index 04a24e425f30530e7b7cf1d224069734fecaf08a..efa90e0ea2da034b4fc538ba64aa8f4c2e9c9674 100644 GIT binary patch literal 10324 zcmV-aD67{BB>?tKRTBvDeUW>s(4Ts55;;ufqkf0rpQn?@omOHXIKJ#>x(E`gPypAf zZWDxqr?fbDQ{!8U?!^ZSFbpJe`*Xo6wQ% zP*zG=P^f|>58d{Yn>QBvbbL4?y~A-Y&{WUKCt!u3%7`2kG{>li*|fY_2T{X$T-#cw zTnHr)U0ld~tCr$OS&I9y#>UYCSgCl-55iSNBMhBN#Z1DhpR?x8FK#E$(~W{kHDswq_{K2N&i@1W)mPtbpcFtTrX=>HaUczMJRh!kMrJ8nSvxbF z@qw)x<+aZGcG+;788mJMQQ2HbZzD2Q-r8qMy^Vps3zjvsMf8JewZ0hgbJq>O8|ABp zpK&j$5o(s#DcDjpWuuj#mijK`G417R0(>+S5aY!D9{py+bR=>GYF=8*w{{t;Rv7&H=b2b@x?_DQuJazuIGpk0)T;hYL(glnGp7T;WLMJ0j>^^dR9sR*4wlJ|o$n z!A0GC0>>&X2tszcKsCDpByG+A25m^9c;*Oo2I@Hoin zqqcS95^v*y3bi?S3wp2P%43tO53qnq?5BS7}`&v`8Ll zS6N>boxmjw`0=UK7v{8MXh{2qYP*33e79PHxl(Y=TuCDh`_v||$jeH)b|Y*a7;t;^ zG)!TmpoD<`OHB*j%y4T&`qXBXWjA`ZwN{zHVou6g2Ouz}9TiJ(zP!DS8Wo1H(z>*2f0r@Dp_?5yTrMTVvOrGxF-JQ5(gT)p?LFTrTZVXDYGu4-IL5)nYm zzG%6XH-O_%tn;rkE4ZU(l~h{7VS(9W#UFrSKTGTK6eopwLwih*YWP-lDhM6sj6`Zf zfmi@;>J^02l6OXdKl(S}Iy`M^yRDnPjb?Dai|J;SiJEE6*}6LdbEpyWOiORTewNi& zjwT>(9OF&4@m@Rbm3b3qFqmuolLfFock3VE3H1Y3JYoQ+$auCGA6-S@%OHrIIJO`( zJ0&EBD}W3NVGQ<#561Z{N^v{-Vfu7@9_>d8c=}x6siNsmH$_Cpde+4|$*Pvkxh?h* z#AJHkVb(gbrPMGmD}hRn9gEC;>%}^2!!J=O%U(I2?6T}I0pn3{9H!2a4a}ym7Q>IA zzjpKaRT>Xn*<2N_HVoIQN1sZPHBHE@sctZ$m589;&UY?S%KC8j(cNUJ20EgiMb$$6 zTL*cZhsFMnQX&&kka=9-%-o1~pxtSm)EYGp2K^0suGwjBQ@;21g?$+>q1UsMH+N&F zpK@9EZ#;(eBb6W0Ms*816zQo2FZeBH&P7ttAQCK)Mp%f7^M1)jWv2^QdwbMWpO5lN zB|wBE!Lm_xc1_USZI^_n1UK;2Vw;mQ0-u4h$^o2ev-{)D%R15Au~HO=#M6V6b&#m4 z-A5fxT=Z?{xU8t$!P5b8>*fA_Y|6kJDT4;D(OkL1&}inS9-rk3f+)Y=+9Llo*&!pw zHC#g7*30$vqzr}0x@fvI_%>Vhnn;tZ7h2sIBkqCvh}4zlTAKrgu<|Fi6dC@A7mglt zklrxb0F+upgI2tm4$DKC|8Iu1cFB5dum#t?aANOp9A2j}($6vK=UiouU(H?KkIOwO zYzFw6O(z1>EVppCzmQ`NM$+3t+IDL1Ep4Kk#);lgoH%KQHeZaq$ewJQryB92uv>%Gd@yzVlrY&8zV<7Q8`Ga5SY10 z3;7Y=;wsV7+{pL7cb^8aMLlnjH)f}c^YD|+vJT`dx(FW-$cJD0@HNM!e_Hwq6Q$Vl zA5bQNQ#wmnzv-EQOeP@{RVC-Flu_g3Jt8$e|W@-(0rcVmK zpPX8IU(+SoZNl`YPROcS+q^gjTtfMBemNZHULJyZse&N*m*O@hZ_eXBY4Q<5Jgr&6 zi?5EzBXvBaM(Umwt+YjxcqYDq8rzG(UKga&3q4>jAiLzPgV3Gy=Eh&q(3gBLmB9;N z2TdpWo$$q1KmOrSn?P6Pc*ohf(Ye!ij%t94&20EJDWL9{T5{%%8;kN_No5A4tRHT* zu0INutWmFt<=v+D7fA%4XVrx+BR9s>3d}zSB1Tc|1`7U7njn*wOg4G^BjA=xL6`5f zjH6{}^z&qf=Z~{Llu(cVc;=bCkwuxS{-TXbC6ij8yN+7yl+2iiklRIUS zDLPtBe{iONAZ)ePcGMaFMpGN<3Ut&y3^*RDILnRs$hFjUBChTp8MoOeOf~-Xppl3R zRE=wpa-K))k6*&pEU>)I{r%FaSdOltxdb3^$8(gp+8zJ#MxHCqS~(*5xpXIU9=w9w zru%4FdQH`?EvJ>D_u}+efgCw@@e&DDB8$g{UaU>ijkKhvckY z@G`2S@rf^^?f}2)cIX$h6PR3RlH0A_*;Ez4npxt?Ap$TDVJw*1E>qIB;;G*E(q9pM zC&-W<5HRcd(C)UmE-8q){Q4NF7Ti*$9W68dBUz%&@zP3hJ%YGm+o8OUezAO$wkP8{ z5yy@ww0P>9z>~O@7Pw#D=HactFR$<&p%!%==R`eN+aZ4%(oKj(RC*gHicPIO^t1dA zqitk_h_DqYI>_Fzfc&EEtTkP5?S z1isDYVciqc-in(qE7cc}33C$br(}ZMUJPZt?3tfg?cl)ik{hX35I~qioI5XhDw*TD zJ!&#W%w&)KCm?VwTq5HodYXe4mC^k~Ov%8);DVlZu%sH809p4u00eka-OHyqsgP?Z z4;|WKt2dhbVL8KlbdkC8tSb)sq9e!CKENuZzi6*``1V?|e>)6KZwys!kKO5s*S5}dbG~6d6BrJ z4uu4)%b=^5S}Ygxo9p7u>Ww`pM1m0{=`~W zJA5?L+S!nz)MfxEHwWTi=ci!vsyvQ0jtAY-N=Ah*& z+DKuTUx_AmdsfeDv;3Y{nld^@6QniAJ_XrGeGb)171ZxUyFuq_j*{}0RLYc(kdcwj_c)Dm`z#P1u z6*`8h1_^NOfSC>)<+{e7SjRKB;|lnXUs*@ED~n>{c5o(Nbgyb%e4#D+DFGN8d+304 z(RTD=UxI1Om~u1yt>Kq7qe+BLI9NK$m!<6EuM@s!H&H+ZhsP2t$UB~d62EwIF6$tgK;iMtBk-{BqOP_JlUuCf97KzUppb*u?GNFF zDPLB+u%%zjLw{-wdJZDu&*+isR^h@c>B}4Dm?$x=llm()014EODhA^kfTh`GBry#! zdxwgzDb5lt82j055X+td62f!4)D6GB%i$u5e*Z{P&pa4`3$z^N0L3m~5ZfVEANKm! zT7Ft8=+mcJ*)o^5E*uf#9$nCyS5fV-sAsHEa6rb?Z= z$RMbA3Yvd(6!OenoeqcxA;zPuX;j+vuA2!7CJnX_<#lQ9BXq$a(;75 z5<=O3c%uxHfgn4Wtb<1O5kYTuN@BSEx(SEeGj5kpxi4AN$3^E zPR^ghH1#IAVzeY{XxKnZ);0H1_5hRye-y1>^ug|^ZAG->K841j^GvfVa6Zby?!E@R zY_8Ri{pm~~3qQyl(#iOHDoXnC=oytn(Gp5Nf6k#WA4hG0;}rqA>Qv#=jLp}n8~KT~ z$()|S$?%^O>4;CDm8>4mO?|4Q;vIxi{Zh*{XmX^PA8h#-^dMRUWrBy2c*li|ECndJ z2H8kqba^c~;?&L2iB*{^$=Y~+Df|Ri6EsN);lq=fPj}{Divje5GX-giF+HmD9qB-C z9y$r48$KK?0A-ca*LisvJYAio---qIcHx#YFqdelJZ4b=OJPJv9)27}Y^zZG*hl9K zr4IdGzZaUAdnEkwZS(+~R3$`dGUA)atxa8@`8EV*1KVWmDLQ!6n=jmua1tVW+e?6k zyEmk|E}w+y#*DET7|7Yq5U>QZpG|^rPV``Rp1%}&P%Htd^)N8m*9|oLFDCnJf(ty{ z`B6oJda-hb%U67=z+p_{c{xn65iT{FXsysF#{5sM#@n`V=X$q$g8;Sim2SukRjVH} z(y6CNrd{oy9@NXtv<0QLIXWBw^<<9cWBDEnzZSyxn_B}f5pES~QX{(CqLS|0kDVv_ zL7Rf)A?yL;buw>v2S#tePE4#UB0MT$%nIl)Vm(oABd_LSaumYu#Of&$yE@6iZFg*o z%sMDmCp#crl^`%#fv_Pij%wg>3b!_Hwfj(7PDxz4;SUb-c000=*cgJm9ef`340xb^ znD%y-A3dcfk_~c5P`)0oXV<9^i5xAc>GLT%=OWKV5ETmkl_$jf9%DgI7{wU(gmh&< z&>dKxWWo~>C2B+kAz+LJu-kXTL&qL;SgNIVa<2${#E2&{L;W5%f`KmZ0D2UK$U2(n zj1Q%gK_OA30876fbTD)<*T3#4@L&8L2GdwNc)k%}r1Ma}T|hKbYwt^dO=#W4B_->c)fa025y9O?)%u=a^%^>e#$^aH8eB>D7&DG%*9t30Hi>=J$|+xB5L}6*)jZ! zK#kd20t;i>#!=K$m-EbZLjdQ=Ps7wEmxUoq`&926XYU+*dd{agWfvjCX=9uHE zU~Zpzkf@b}uTz@RSe}VpcMJQ|k;59MO*8*XZgyvxO$ojRfsE9OZu6 zbPQx69Oou}QV6Xzb@Yhce>w8etYN}Vl+ol1f(@~t&7{TI54Xhu^zF_*iYQ>+>^$IX zWc_A@`z9TjHA*|(6@Ku&kR@|cBsO+vi%-^v&dsi%uSc&Rd z>pBB8?GC0l^&XgGWYZX$=hLh|cfwFeV#?EA6}t97IqOP87bkktUs#oz1jd)yP^ zVJcp=O5(yN)C6QPgdYux1L7G1ePRSk9B242+7+j~5!8`FqAcjsCq31GS^&wk5YB7A zj_P2`IXv(yH84X-j@#b8 zu($3Ik+5sTQ3Vm=aBcJmX`o_^L@^W5aK>kf2-Oo`!d}bEtA(regNAP4G>PGFp|DuI z?Q`7+Ijj?90xp(>VaM$XL|f2OZv}Eb?1i%OyE@wmnw$i$w&uKigS$`L0x?(7TF4d>nJX{fMsV_SAwbp&G}e&Z9N}q$=~&u( z(<~fo4GC6f9Gh0>aglXC>1(@w2}^fPqb9jzcuZNtsc(ZU={FaHO~J(Gu!v;rAc*qy z6gT3kZW&hX4Cgz6jiGcPhThortN~AvvgUJR0^Bcgg_YC%`B@}8KiZ(q9m`bB@| zl)3FMYhLQ}F&^3`b(u^ua~4-e@jPCj=WetnGZC|^du;zM@>Z`%gfsLO#LWKXf0xJ@4u>oC;@{iYgc)vRtpGQzIU znK2U;n!SeGqnR{9X5AE)5sSP)qQU|wm$ky5^Q0i)5NGY)bXms$1h9lm4w+XoxQ|@T z1C91(YUHVO;R0kF<#;mKq~iu#$T{M$tq{Q~7nS7y3EVc~MDr~v27soL1)$Fjb`ab# zYrUt>iE&49wi+jjbg0~&3J&h!mnL@67#yP&4JPSPg37p9z}@yA>D84mS4D$hS{gOS zuhP*ut3kMO0<};pA}cDq=1}e>5H2%*i2_a9!;e5!j#8r~H+C_PB{GY_l0wof(cL_5 zLR|zB32e{4MU2*?kBCG^A^puw4~zyek<{OjO29L?d1~Z77OZ`k3VmY;B`Tb1{+SC6 z5`RiNUPWK~R~CH^*I4B&KLD*_6QHBX2VSpo&u4%nN%4LZ6OEi)c0D0eo!LT&$o@eT zuohI(5#JAeU!g?Z!`CGS#S+|HJO*eLiYnSJ?OdYt#zxWUrS1=c5)U(AoIGv!&H9b0 z<=ms>i}`N}CF#3J zfWT!5V4|fma=cq)yynR=D1ujkx|Eae-F`fu-+O4*ATGvGKL&pUkI+hXJs zXz9AIcHwwLQSbEzZip;wb6=Cfng$`#l9L&6bg?>_!+Q?KP0t7rInBhxKZ{I-cs+5t z{OQbn;9;(Gamhhaey3j4qCZ0ZQRZU$@<&J2Js3K-xx}L^m`c8vSdbDhPR@)Ns=G2v zHM{yRw@a}Km86n4U9Wb$&*6zMu6Oa{<-QPxcd(74#^~nn)LG| zf`ZL{^wN8OIFy4DAX!9*dg|R2p)Joe$YDzn2t69m01bx(H-D8l;oot$!Sv%q^FxUt-rnQC!<6E zMqXim?1z3vzvZF!Q~3Z5aq>(LIHZY2Nx>X7~%nLa@&5G5i?T^DdDiJ(c`P zZW-Iy+B5elG(;bptJaVF(}VUJ1mq z+(=pqBPv8J_hx1X?8>-d5OMAVD3qvvYf+ zb)9okov~L!F-3V|N5mEfxsZX4(!mjg>U)96B!&^Uy7*`uGp*w={MS5V@$uMjB|&KazP50 zRtjad0E+II9I?pX;6FvW13*x!DY>Tnc#1k?K2EKqZ@pd9Hw0mdTb}gIkXFi}{+0_Df1A_nX22~jP5f|*((;9=FF zR~THF${+b1)9V!1AS5xK1|~$zXhvdeBAavw@GmZGuToCC9WEFYl@A`ludQ0MgRWy7DMY>vsulGgd zjmT4us4;X}vmPLJvBRyLH?!N`t$FnMS#{LPR7G*h(Bconw#z_<@%lc$JMo7Q_jq`@ z1IGyf#KU-=t@(7BnSvmBXX!8HRzaGSc@w6^Y(rfES-#~4DjnJHy2r^p92pGgGj5^x z^2gyzdNbtC{M0OR)`aIC@A_c{U>>qITaaP8D9o#jV~|@JpW6nmHyZA4k0+eeX#v*3 zPxB;ljOeoMm4>&Nse?@QLBMX0m*3Vt%#)nc96{dJq7R(pHZPp>W>l zQY5b3!npF|y+#jd{q}_V6069*Lx7^#;&Lmn0|tF4CPQt|1Xhd_MT`L!LVkpM49{mg zAwL=$8#(qSCVdc3>{EC9q|Py1hYOF>+_w&6LFS7NA-u8c%GY+!Um{8=c4%f8KQX|O zZ0efB_8L0}cvjcVb^2+WQMDmLGN9{6a<6|EjJ#%kEgMI2$jLUdt~N1pidZAC9gB(& z{Ux)Pa|9sqc{!RSN?*q2xAkyJLC};(z7DVq?HI$j86v2&Ui#6hON}cd+y-8NViOZU zWt#f(yiQ`v^7j!5VCq)@)H>*=2Pe1_bvCi^a+4TMjq9v^Jvx`_#{lRy(E3a-&^AeN zh*4Fj@J1`O%5Xr+)2)T;6$G5%*|X*ceQk^r)R0;zhis_SG@EvHC>Cz~wRc=J!e?Fh z6^SxP#&ux{gn&dd82WvNNYAx{n$_Uo)6t8U*cetlq*GE{bP~|=DPTp6x%}hM>4iF@DLld;5%BAEOSlYkW6^&kpH6kDpypRnD9%+VIE8D zYm$V^SMNWRsbRsZa_NL_W>CSj6X%>i0&wBoDUDQ3?+N%o7s1*>WB-h_1Q6!y>eE`L z%~wa#v+QQJiFFqhyesghkfyF)b*M_>ELu{E`AHXALJ6tNM(DcD zUx13%m$*tKa@Dtv*cNOOf-x!@0pV`6z#6OIu|x&q+MA+eh;X2YoWhjoDd%c5RCSj% zciP&$wn_npVjQni<3X1RgOrsx=ntvT?Ng3w4X~~fRE?dcU7O6dR!2(O!sggHH|IFb zyZc(E4XDpuPFvcP`e+A+{Jn9sFk((r_J6$pc?ERtAIJ^HigA|s+8;Wrvi2UBQBuru zwWACnzQYP7!&tfh$fTHDboV*^q8}~GAsJfhF=v)$2GBhQp_XB3` zXRiT}2;>QNLWtxnS4SI3VIRiDg3O9j)3vlm%U|sXK!=^+g__8G6r9CKh0@eTiK`q? z7^r!a{MP(^-B-PVaPvViykz3~2C5_Y=Vu72y?E~i#y#(P+xmatgE4czB|?;=m&wd$T=MT{A!inb&kP& z-_}B9O`D9!qQlWm`t0e~W#3aBHbRj!f`2v$(kxTwySXUvJ6*fHDq1nYoe1`o(QOjq z1_)&?c=&|=ZE#};UP*mBoZh41Vya5U`DAP!lBhDIvS?;0$0-Bk$sv~%9RJAB$K@SP0~@!(^gC>|CPn}KEUF3 zb_G57z~^aXz#s~m;Ya+Ah9aC9^NX=4BSO=@p$aGW*AyX%*FUu*OgCLRGpdQ9uh)*p zznt--(?FZz$!-sSGF}ZXkkd~_2In`9R6S}*-neW`W2%^t?egFoK5&R(YDfJK?r6)( z}P3bh^p15b@5iQE9e9zWi9HOsvc z=?*D4!ZA+Z385qP)!~vk!#A-iWNb{!{gF3AZ^pJdQX?6{BaQf|mx7?MSbT8xIu0w? z3>wc)f#{wH#s=Xr+;T}W?Shj$Hn(stxK50_?_iV8C(2ufna&wcd`(u$WH7qAu?a61{e$SJ%)_> zfo17T-No6|R5@EtZGc_1;0TPz&1?6g`wZb7_vbTT$jVo8$6?ei3-lL|&#l9(&fijy zjnP?wYLV~~6^<<`GNY^QVP35!nBnY+@e}oYhnx@hL_gK3J~J2EeSNr4r}aKFG0wVO msKpM;tM~o558>0>fX1+E%WJ<~gRQ)&`dWl`6RW)C4$GLyUlrc~ literal 10324 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 Date: Wed, 7 Jun 2023 13:39:39 -0700 Subject: [PATCH 2/3] fixed linter. --- google/auth/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google/auth/__init__.py b/google/auth/__init__.py index 5b3d734aa..2875772b3 100644 --- a/google/auth/__init__.py +++ b/google/auth/__init__.py @@ -19,8 +19,8 @@ from google.auth import version as google_auth_version from google.auth._default import ( default, - load_credentials_from_file, load_credentials_from_dict, + load_credentials_from_file, ) From c523ee9e64b4d82711376dd42b249270881e4247 Mon Sep 17 00:00:00 2001 From: Carl Lundin Date: Thu, 8 Jun 2023 09:37:20 -0700 Subject: [PATCH 3/3] Fix cover test. --- tests/test__default.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test__default.py b/tests/test__default.py index 9eeb1cb25..affbb7624 100644 --- a/tests/test__default.py +++ b/tests/test__default.py @@ -202,6 +202,14 @@ def test_load_credentials_from_dict_non_dict_object(): assert excinfo.match(r"dict type was expected") +def test_load_credentials_from_dict_authorized_user(): + credentials, project_id = _default.load_credentials_from_dict( + AUTHORIZED_USER_FILE_DATA + ) + assert isinstance(credentials, google.oauth2.credentials.Credentials) + assert project_id is None + + def test_load_credentials_from_file_invalid_json(tmpdir): jsonfile = tmpdir.join("invalid.json") jsonfile.write("{")