PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
package sign import ( "crypto/rsa" "fmt" "net/http" "strings" "time" ) const ( // CookiePolicyName name of the policy cookie CookiePolicyName = "CloudFront-Policy" // CookieSignatureName name of the signature cookie CookieSignatureName = "CloudFront-Signature" // CookieKeyIDName name of the signing Key ID cookie CookieKeyIDName = "CloudFront-Key-Pair-Id" ) // A CookieOptions optional additional options that can be applied to the signed // cookies. type CookieOptions struct { Path string Domain string Secure bool } // apply will integration the options provided into the base cookie options // a new copy will be returned. The base CookieOption will not be modified. func (o CookieOptions) apply(opts ...func(*CookieOptions)) CookieOptions { if len(opts) == 0 { return o } for _, opt := range opts { opt(&o) } return o } // A CookieSigner provides signing utilities to sign Cookies for Amazon CloudFront // resources. Using a private key and Credential Key Pair key ID the CookieSigner // only needs to be created once per Credential Key Pair key ID and private key. // // More information about signed Cookies and their structure can be found at: // http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html // // To sign a Cookie, create a CookieSigner with your private key and credential // pair key ID. Once you have a CookieSigner instance you can call Sign or // SignWithPolicy to sign the URLs. // // The signer is safe to use concurrently, but the optional cookies options // are not safe to modify concurrently. type CookieSigner struct { keyID string privKey *rsa.PrivateKey Opts CookieOptions } // NewCookieSigner constructs and returns a new CookieSigner to be used to for // signing Amazon CloudFront URL resources with. func NewCookieSigner(keyID string, privKey *rsa.PrivateKey, opts ...func(*CookieOptions)) *CookieSigner { signer := &CookieSigner{ keyID: keyID, privKey: privKey, Opts: CookieOptions{}.apply(opts...), } return signer } // Sign returns the cookies needed to allow user agents to make arbetrary // requests to cloudfront for the resource(s) defined by the policy. // // Sign will create a CloudFront policy with only a resource and condition of // DateLessThan equal to the expires time provided. // // The returned slice cookies should all be added to the Client's cookies or // server's response. // // Example: // // s := sign.NewCookieSigner(keyID, privKey) // // // Get Signed cookies for a resource that will expire in 1 hour // cookies, err := s.Sign("*", time.Now().Add(1 * time.Hour)) // if err != nil { // fmt.Println("failed to create signed cookies", err) // return // } // // // Or get Signed cookies for a resource that will expire in 1 hour // // and set path and domain of cookies // cookies, err := s.Sign("*", time.Now().Add(1 * time.Hour), func(o *sign.CookieOptions) { // o.Path = "/" // o.Domain = ".example.com" // }) // if err != nil { // fmt.Println("failed to create signed cookies", err) // return // } // // // Server Response via http.ResponseWriter // for _, c := range cookies { // http.SetCookie(w, c) // } // // // Client request via the cookie jar // if client.CookieJar != nil { // for _, c := range cookies { // client.Cookie(w, c) // } // } func (s CookieSigner) Sign(u string, expires time.Time, opts ...func(*CookieOptions)) ([]*http.Cookie, error) { scheme, err := cookieURLScheme(u) if err != nil { return nil, err } resource, err := CreateResource(scheme, u) if err != nil { return nil, err } p := NewCannedPolicy(resource, expires) return createCookies(p, s.keyID, s.privKey, s.Opts.apply(opts...)) } // Returns and validates the URL's scheme. // http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html#private-content-custom-policy-statement-cookies func cookieURLScheme(u string) (string, error) { parts := strings.SplitN(u, "://", 2) if len(parts) != 2 { return "", fmt.Errorf("invalid cookie URL, missing scheme") } scheme := strings.ToLower(parts[0]) if scheme != "http" && scheme != "https" && scheme != "http*" { return "", fmt.Errorf("invalid cookie URL scheme. Expect http, https, or http*. Go, %s", scheme) } return scheme, nil } // SignWithPolicy returns the cookies needed to allow user agents to make // arbetrairy requets to cloudfront for the resource(s) defined by the policy. // // The returned slice cookies should all be added to the Client's cookies or // server's response. // // Example: // // s := sign.NewCookieSigner(keyID, privKey) // // policy := &sign.Policy{ // Statements: []sign.Statement{ // { // // Read the provided documentation on how to set this // // correctly, you'll probably want to use wildcards. // Resource: rawCloudFrontURL, // Condition: sign.Condition{ // // Optional IP source address range // IPAddress: &sign.IPAddress{SourceIP: "192.0.2.0/24"}, // // Optional date URL is not valid until // DateGreaterThan: &sign.AWSEpochTime{time.Now().Add(30 * time.Minute)}, // // Required date the URL will expire after // DateLessThan: &sign.AWSEpochTime{time.Now().Add(1 * time.Hour)}, // }, // }, // }, // } // // // Get Signed cookies for a resource that will expire in 1 hour // cookies, err := s.SignWithPolicy(policy) // if err != nil { // fmt.Println("failed to create signed cookies", err) // return // } // // // Or get Signed cookies for a resource that will expire in 1 hour // // and set path and domain of cookies // cookies, err := s.SignWithPolicy(policy, func(o *sign.CookieOptions) { // o.Path = "/" // o.Domain = ".example.com" // }) // if err != nil { // fmt.Println("failed to create signed cookies", err) // return // } // // // Server Response via http.ResponseWriter // for _, c := range cookies { // http.SetCookie(w, c) // } // // // Client request via the cookie jar // if client.CookieJar != nil { // for _, c := range cookies { // client.Cookie(w, c) // } // } func (s CookieSigner) SignWithPolicy(p *Policy, opts ...func(*CookieOptions)) ([]*http.Cookie, error) { return createCookies(p, s.keyID, s.privKey, s.Opts.apply(opts...)) } // Prepares the cookies to be attached to the header. An (optional) options // struct is provided in case people don't want to manually edit their cookies. func createCookies(p *Policy, keyID string, privKey *rsa.PrivateKey, opt CookieOptions) ([]*http.Cookie, error) { b64Sig, b64Policy, err := p.Sign(privKey) if err != nil { return nil, err } // Creates proper cookies cPolicy := &http.Cookie{ Name: CookiePolicyName, Value: string(b64Policy), HttpOnly: true, } cSignature := &http.Cookie{ Name: CookieSignatureName, Value: string(b64Sig), HttpOnly: true, } cKey := &http.Cookie{ Name: CookieKeyIDName, Value: keyID, HttpOnly: true, } cookies := []*http.Cookie{cPolicy, cSignature, cKey} // Applie the cookie options for _, c := range cookies { c.Path = opt.Path c.Domain = opt.Domain c.Secure = opt.Secure } return cookies, nil }