{
    "componentChunkName": "component---src-templates-tag-js",
    "path": "/tag/amazon-cognito/",
    "result": {"data":{"ghostTag":{"slug":"amazon-cognito","name":"Amazon Cognito","visibility":"public","feature_image":null,"description":null,"meta_title":null,"meta_description":null},"allGhostPost":{"edges":[{"node":{"id":"Ghost__Post__61040a413986b000013a45df","title":"GolangでCognito認証しトークンを取得する","slug":"golang-cognito","featured":false,"feature_image":null,"excerpt":"自分が関わっているサービスで、認証にAmazon Cognitoを使っています。\n\nAmazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWSAmazon Web Services, Inc.\n[https://aws.amazon.com/jp/cognito/]\n全てのリクエストについてトークンの検証をするので、APIサーバの動作確認時に必ずヘッダにトークンをセットする必要があります。このトークンを用意するのが地味に面倒だったので、Golangでスクリプトを書きました。\n\n以下の記事を参考にしました。\n\ngolangでCognito認証（ただしSecure Remote Password(SRP)プロトコルではない） - Qiita参考\nhttp://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.ht...\nQiitacobachan [https://qiita.com/cobachan/items/9e","custom_excerpt":null,"visibility":"public","created_at_pretty":"30 July, 2021","published_at_pretty":"29 June, 2021","updated_at_pretty":"23 August, 2021","created_at":"2021-07-30T23:18:41.000+09:00","published_at":"2021-06-30T00:00:00.000+09:00","updated_at":"2021-08-23T21:41:10.000+09:00","meta_title":null,"meta_description":null,"og_description":null,"og_image":null,"og_title":null,"twitter_description":null,"twitter_image":null,"twitter_title":null,"authors":[{"name":"Yu Takahashi","slug":"yu","bio":null,"profile_image":null,"twitter":null,"facebook":null,"website":null}],"primary_author":{"name":"Yu Takahashi","slug":"yu","bio":null,"profile_image":null,"twitter":null,"facebook":null,"website":null},"primary_tag":{"name":"Amazon Cognito","slug":"amazon-cognito","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},"tags":[{"name":"Amazon Cognito","slug":"amazon-cognito","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},{"name":"Go","slug":"go","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"}],"plaintext":"自分が関わっているサービスで、認証にAmazon Cognitoを使っています。\n\nAmazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWSAmazon Web Services, Inc.\n[https://aws.amazon.com/jp/cognito/]\n全てのリクエストについてトークンの検証をするので、APIサーバの動作確認時に必ずヘッダにトークンをセットする必要があります。このトークンを用意するのが地味に面倒だったので、Golangでスクリプトを書きました。\n\n以下の記事を参考にしました。\n\ngolangでCognito認証（ただしSecure Remote Password(SRP)プロトコルではない） - Qiita参考\nhttp://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.ht...\nQiitacobachan [https://qiita.com/cobachan/items/9ec379bbcc28a9d3d08a] package \nmain import ( \"fmt\" \"log\" \"os\" \"github.com/aws/aws-sdk-go/aws\" \n\"github.com/aws/aws-sdk-go/aws/session\" \n\"github.com/aws/aws-sdk-go/service/cognitoidentityprovider\" ) func main() { if \nlen(os.Args) != 3 { log.Fatal(\"invalid args\") } id := os.Args[1] password := os.\nArgs[2] params := &cognitoidentityprovider.AdminInitiateAuthInput{ AuthFlow: aws\n.String(cognitoidentityprovider.AuthFlowTypeAdminNoSrpAuth), AuthParameters: map\n[string]*string{ \"USERNAME\": aws.String(id), \"PASSWORD\": aws.String(password), \n}, ClientId: aws.String(os.Getenv(\"CLIENT_ID\")), UserPoolId: aws.String(os.\nGetenv(\"USER_POOL_ID\")), } client := cognitoidentityprovider.New( session.Must(\nsession.NewSessionWithOptions(session.Options{ SharedConfigState: session.\nSharedConfigEnable, })), ) res, err := client.AdminInitiateAuth(params) if err \n!= nil { log.Fatal(err) } if res == nil || res.AuthenticationResult == nil || \nres.AuthenticationResult.IdToken == nil { log.Fatal(\"failed to login\") } fmt.\nPrintln(*res.AuthenticationResult.IdToken) } view raw\n[https://gist.github.com/yutakahashi114/f4552724774f546a688e0935f80154c7/raw/666ff46242c2f5d04c5b93a4aea3323cbeef38e0/cognito_token.go]\n cognito_token.go\n[https://gist.github.com/yutakahashi114/f4552724774f546a688e0935f80154c7#file-cognito_token-go]\nhosted with ❤ by GitHub [https://github.com] \n引数でusernameとpasswordを指定します。sessionの生成方法は自分の環境に合わせて少し変えています。以下を参考にしました。\n\nConfiguring the AWS SDK for Go - AWS SDK for GoConfigure the |sdk-go| to\nspecify\nwhich credentials to use and to which AWS Region to send requests.AWS SDK for Go\n[https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html]\nローカルではDockerを使用しているので、簡単に使うためにMakefileに以下を追加します。\n\ntoken:\n    docker-compose exec app go run main.go ${ID} ${PASS}\n\n\n以下のように実行すると、トークンが出力されます。\n\n$ make token ID=email@example.com PASS=password\n\n\n以上です。","html":"<!--kg-card-begin: markdown--><p>自分が関わっているサービスで、認証にAmazon Cognitoを使っています。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://aws.amazon.com/jp/cognito/\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Amazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWS</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://a0.awsstatic.com/libra-css/images/site/touch-icon-ipad-144-smile.png\"><span class=\"kg-bookmark-author\">Amazon Web Services, Inc.</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png\"></div></a></figure><!--kg-card-begin: markdown--><p>全てのリクエストについてトークンの検証をするので、APIサーバの動作確認時に必ずヘッダにトークンをセットする必要があります。このトークンを用意するのが地味に面倒だったので、Golangでスクリプトを書きました。</p>\n<p>以下の記事を参考にしました。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://qiita.com/cobachan/items/9ec379bbcc28a9d3d08a\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">golangでCognito認証（ただしSecure Remote Password(SRP)プロトコルではない） - Qiita</div><div class=\"kg-bookmark-description\">参考 http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.ht...</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.qiita.com/assets/favicons/public/apple-touch-icon-ec5ba42a24ae923f16825592efdc356f.png\"><span class=\"kg-bookmark-author\">Qiita</span><span class=\"kg-bookmark-publisher\">cobachan</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-1150d8b18a7c15795b701a55ae908f94.png?ixlib&#x3D;rb-4.0.0&amp;w&#x3D;1200&amp;mark64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTM4MCZ0eHQ2ND1aMjlzWVc1bjQ0R25RMjluYm1sMGItaXFqZWlvdk8tOGlPT0JuLU9Cb09PQmwxTmxZM1Z5WlNCU1pXMXZkR1VnVUdGemMzZHZjbVFvVTFKUUtlT0RsLU9EcmVPRGlPT0NzLU9EcS1PQnAtT0JyLU9CcXVPQmhPLThpUSZ0eHQtY29sb3I9JTIzMzMzJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU0JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1jZW50ZXIlMkNtaWRkbGUmcz0zNDM5ZTNiMWI1NjU0YTJkYTYyMWQyYTRiZTc5Mzg2ZQ&amp;mark-align&#x3D;center%2Cmiddle&amp;blend64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTUwMCZ0eHQ2ND1RR052WW1GamFHRnUmdHh0LWNvbG9yPSUyMzMzMyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT00NSZ0eHQtYWxpZ249cmlnaHQlMkNib3R0b20mcz05ZDk4YWFlMzI2MWM1MzYxYjRlNGUyZDBmM2UzOTM1MA&amp;blend-align&#x3D;center%2Cmiddle&amp;blend-mode&#x3D;normal&amp;s&#x3D;bd6ba9aebd7022eb579c63ff8f29209d\"></div></a></figure><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/f4552724774f546a688e0935f80154c7.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist109529913\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_token-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_token-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_token-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>package</span> main</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_token-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_token-go-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_token-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_token-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;log&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_token-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;os&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_token-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_token-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/aws&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_token-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/aws/session&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_token-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/service/cognitoidentityprovider&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_token-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_token-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_token-go-LC13\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_token-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-en>len</span>(<span class=pl-s1>os</span>.<span class=pl-c1>Args</span>) <span class=pl-c1>!=</span> <span class=pl-c1>3</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_token-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>log</span>.<span class=pl-en>Fatal</span>(<span class=pl-s>&quot;invalid args&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_token-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_token-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>id</span> <span class=pl-c1>:=</span> <span class=pl-s1>os</span>.<span class=pl-c1>Args</span>[<span class=pl-c1>1</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_token-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>password</span> <span class=pl-c1>:=</span> <span class=pl-s1>os</span>.<span class=pl-c1>Args</span>[<span class=pl-c1>2</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_token-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_token-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>params</span> <span class=pl-c1>:=</span> <span class=pl-c1>&amp;</span>cognitoidentityprovider.<span class=pl-smi>AdminInitiateAuthInput</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_token-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>AuthFlow</span>: <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>cognitoidentityprovider</span>.<span class=pl-c1>AuthFlowTypeAdminNoSrpAuth</span>),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_token-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>AuthParameters</span>: <span class=pl-k>map</span>[<span class=pl-smi>string</span>]<span class=pl-c1>*</span><span class=pl-smi>string</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_token-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s>&quot;USERNAME&quot;</span>: <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>id</span>),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_token-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s>&quot;PASSWORD&quot;</span>: <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>password</span>),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_token-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_token-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>ClientId</span>:   <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>os</span>.<span class=pl-en>Getenv</span>(<span class=pl-s>&quot;CLIENT_ID&quot;</span>)),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_token-go-LC27\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>UserPoolId</span>: <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>os</span>.<span class=pl-en>Getenv</span>(<span class=pl-s>&quot;USER_POOL_ID&quot;</span>)),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_token-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_token-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_token-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>client</span> <span class=pl-c1>:=</span> <span class=pl-s1>cognitoidentityprovider</span>.<span class=pl-en>New</span>(</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_token-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>session</span>.<span class=pl-en>Must</span>(<span class=pl-s1>session</span>.<span class=pl-en>NewSessionWithOptions</span>(session.<span class=pl-smi>Options</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_token-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>SharedConfigState</span>: <span class=pl-s1>session</span>.<span class=pl-c1>SharedConfigEnable</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_token-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">\t\t})),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_token-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\t)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_token-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_token-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>res</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>client</span>.<span class=pl-en>AdminInitiateAuth</span>(<span class=pl-s1>params</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_token-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_token-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>log</span>.<span class=pl-en>Fatal</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_token-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_token-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>res</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-s1>res</span>.<span class=pl-c1>AuthenticationResult</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-s1>res</span>.<span class=pl-c1>AuthenticationResult</span>.<span class=pl-c1>IdToken</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_token-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>log</span>.<span class=pl-en>Fatal</span>(<span class=pl-s>&quot;failed to login&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_token-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_token-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>fmt</span>.<span class=pl-en>Println</span>(<span class=pl-c1>*</span><span class=pl-s1>res</span>.<span class=pl-c1>AuthenticationResult</span>.<span class=pl-c1>IdToken</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_token-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_token-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/f4552724774f546a688e0935f80154c7/raw/666ff46242c2f5d04c5b93a4aea3323cbeef38e0/cognito_token.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/f4552724774f546a688e0935f80154c7#file-cognito_token-go\">cognito_token.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>引数でusernameとpasswordを指定します。sessionの生成方法は自分の環境に合わせて少し変えています。以下を参考にしました。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Configuring the AWS SDK for Go - AWS SDK for Go</div><div class=\"kg-bookmark-description\">Configure the |sdk-go| to specify which credentials to use and to which AWS Region to send requests.</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://docs.aws.amazon.com/assets/images/favicon.ico\"><span class=\"kg-bookmark-author\">AWS SDK for Go</span></div></div></a></figure><!--kg-card-begin: markdown--><p>ローカルではDockerを使用しているので、簡単に使うためにMakefileに以下を追加します。</p>\n<pre><code>token:\n    docker-compose exec app go run main.go ${ID} ${PASS}\n</code></pre>\n<p>以下のように実行すると、トークンが出力されます。</p>\n<pre><code>$ make token ID=email@example.com PASS=password\n</code></pre>\n<p>以上です。</p>\n<!--kg-card-end: markdown-->","url":"https://ghost.tech.anti-pattern.co.jp/golang-cognito/","canonical_url":null,"uuid":"592d8330-c9ba-4c38-b6fb-fc32d8b71002","page":null,"codeinjection_foot":null,"codeinjection_head":null,"codeinjection_styles":null,"comment_id":"61040a413986b000013a45df","reading_time":2}},{"node":{"id":"Ghost__Post__61040dc93986b000013a4604","title":"Amazon Cognito のローカル開発用エミュレータを作ろうとした話","slug":"amazon-cognito-emulator","featured":false,"feature_image":null,"excerpt":"自分が関わっているサービスで、認証に Amazon Cognito を使っています。\n\nAmazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWSAmazon Web Services, Inc.\n[https://aws.amazon.com/jp/cognito/]Cognito\nは公式でエミュレータ的なものは提供されていないようなので、ローカル環境では開発用の Cognito に繋いでいます。\n\n実物の Cognito を使う場合、メールをモックサーバに飛ばせないので誤送信の可能性があったり、ユーザーの追加が面倒だったりと、個人的に不便を感じていました。\n\nそのため、Cognito の動きを再現するエミュレータを作りました。\n\n今回は自分が必要な最低限の機能だけ実装しています。足りない機能は適宜追加するつもりです。\n\nとりあえず以下の機能を実装しました。\n\n * 公開鍵の取得\n * 認証\n * ユーザー作成\n\nエンドポイント\nCognito のエンドポイントは恐らく以下の2つだけです。\n\n1. GET https://cognito-idp.{region}.","custom_excerpt":null,"visibility":"public","created_at_pretty":"30 July, 2021","published_at_pretty":"29 June, 2021","updated_at_pretty":"23 August, 2021","created_at":"2021-07-30T23:33:45.000+09:00","published_at":"2021-06-30T00:00:00.000+09:00","updated_at":"2021-08-23T21:36:56.000+09:00","meta_title":null,"meta_description":null,"og_description":null,"og_image":null,"og_title":null,"twitter_description":null,"twitter_image":null,"twitter_title":null,"authors":[{"name":"Yu Takahashi","slug":"yu","bio":null,"profile_image":null,"twitter":null,"facebook":null,"website":null}],"primary_author":{"name":"Yu Takahashi","slug":"yu","bio":null,"profile_image":null,"twitter":null,"facebook":null,"website":null},"primary_tag":{"name":"Amazon Cognito","slug":"amazon-cognito","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"},"tags":[{"name":"Amazon Cognito","slug":"amazon-cognito","description":null,"feature_image":null,"meta_description":null,"meta_title":null,"visibility":"public"}],"plaintext":"自分が関わっているサービスで、認証に Amazon Cognito を使っています。\n\nAmazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWSAmazon Web Services, Inc.\n[https://aws.amazon.com/jp/cognito/]Cognito\nは公式でエミュレータ的なものは提供されていないようなので、ローカル環境では開発用の Cognito に繋いでいます。\n\n実物の Cognito を使う場合、メールをモックサーバに飛ばせないので誤送信の可能性があったり、ユーザーの追加が面倒だったりと、個人的に不便を感じていました。\n\nそのため、Cognito の動きを再現するエミュレータを作りました。\n\n今回は自分が必要な最低限の機能だけ実装しています。足りない機能は適宜追加するつもりです。\n\nとりあえず以下の機能を実装しました。\n\n * 公開鍵の取得\n * 認証\n * ユーザー作成\n\nエンドポイント\nCognito のエンドポイントは恐らく以下の2つだけです。\n\n1. GET https://cognito-idp.{region}.amazonaws.com/{user-pool-id}/.well-known/jwks.json\n2. POST https://cognito-idp.{region}.amazonaws.com/\n\n\n 1. は公開鍵の取得、2. はそれ以外の操作（認証やユーザーの作成、削除）に使います。\n\n公開鍵の取得\n 1. のエンドポイントを叩くと、以下のような json が返ってきます。\n\n{  \n  \"keys\": [  \n    {  \n      \"alg\": \"RS256\",  \n      \"e\": \"XXXX\",  \n      \"kid\": \"xxxxkid\",  \n      \"kty\": \"RSA\",  \n      \"n\": \"xxxx...\",  \n      \"use\": \"sig\"  \n    },\n    ...\n  ]  \n}\n\n\nRSA で暗号化しているようなので、まずは鍵を作成します。以下を参考にしました。\n\njwt-goを用いた、GolangでのJWTの発行、認証について - QiitaGolangでJWT（JSON Web\nToken）を取り扱いたいと思い、jwt-goの使い方を調べました。 JWTについての説明は他の有益な解説サイトがあるので、そちらを参考にして下さい。\n早速実装の説明に入ります。 Rou...Qiitawh1teB0x\n[https://qiita.com/wh1teB0x/items/e2133eeb94f57629b5e7]Encode Private Key\ngetting Error: asn1: structure error: tags don’t matchWhen i try to parses the\nencode private key with sample private key -----BEGIN OPENSSH PRIVATE\nKEY-----b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\nStack OverflowBlack_Dreams\n[https://stackoverflow.com/questions/55470311/encode-private-key-getting-error-asn1-structure-error-tags-dont-match]\nターミナルで以下を実行します。\n\n$ ssh-keygen -t rsa -f key.pem -m pem  \n$ ssh-keygen -f key.pem.pub -e -m pkcs8 > key.pem.pub.pkcs8\n\n\nkey.pem が秘密鍵、key.pem.pub.pkcs8 が公開鍵です。\n\nkey.pem.pub.pkcs8を以下のように読み込んで整形します。\n\nimport ( \"encoding/base64\" \"encoding/binary\" \"encoding/json\" \"io/ioutil\" \n\"github.com/dgrijalva/jwt-go\" ) const jwkKeyID = \"hoge\" type jwkKey struct { Alg \n string `json:\"alg\"` E string `json:\"e\"` Kid string `json:\"kid\"` Kty string \n`json:\"kty\"` N string `json:\"n\"` Use string `json:\"use\"` } func getPublicKey() (\nstring, error) { verifyBytes, err := ioutil.ReadFile(\"./key.pem.pub.pkcs8\") if \nerr != nil { return \"\", err } verifyKey, err := jwt.ParseRSAPublicKeyFromPEM(\nverifyBytes) if err != nil { return \"\", err } encodedN := base64.RawURLEncoding.\nEncodeToString(verifyKey.N.Bytes()) bytesE := make([]byte, 4) binary.BigEndian.\nPutUint32(bytesE, uint32(verifyKey.E)) encodedE := base64.RawURLEncoding.\nEncodeToString(bytesE) pubKey, err := json.Marshal(jwkKey{ Alg: jwt.\nSigningMethodRS256.Alg(), E: encodedE, Kid: jwkKeyID, Kty: \"RSA\", N: encodedN, \nUse: \"sig\", }) if err != nil { return \"\", err } return string(pubKey), nil } \nview raw\n[https://gist.github.com/yutakahashi114/01ad8e5ae7e1a3f886f4be4f6b217ec1/raw/ee469b087678297a60343a573ba7239b934bf737/cognito_public_key.go]\n cognito_public_key.go\n[https://gist.github.com/yutakahashi114/01ad8e5ae7e1a3f886f4be4f6b217ec1#file-cognito_public_key-go]\nhosted with ❤ by GitHub [https://github.com] kid は鍵を識別するための ID ですが、後述する token の header にセットした値と一致していれば何でも良いです。\n\n整形した鍵を json で返すエンドポイントを作成します。\n\nimport ( \"fmt\" \"log\" \"net/http\" \"github.com/go-chi/chi/v5\" \n\"github.com/go-chi/chi/v5/middleware\" ) func main() { pubKeyString, err := \ngetPublicKey() if err != nil { panic(err) } mux := chi.NewRouter() mux.Use(\nmiddleware.Logger) mux.Get(\"/{userPoolID}/.well-known/jwks.json\", func(w http.\nResponseWriter, r *http.Request) { w.Write([]byte(fmt.Sprintf(`{\"keys\":[%s]}`, \npubKeyString))) }) log.Println(http.ListenAndServe(\":80\", mux)) } view raw\n[https://gist.github.com/yutakahashi114/5efe826eef370b141e479336da674600/raw/9f48f8bb74e659257c1e17b93f33609753d0a5d3/cognito_public_key_endpoint.go]\n cognito_public_key_endpoint.go\n[https://gist.github.com/yutakahashi114/5efe826eef370b141e479336da674600#file-cognito_public_key_endpoint-go]\nhosted with ❤ by GitHub [https://github.com] 恐らく実際はuserPoolID ごとに異なる鍵を返していると思いますが、面倒なので全ての ID で同じ 鍵を返しています。\n\nこれで公開鍵の取得エンドポイントは完成です。\n\nユーザー情報\n実際にどんな感じで保存しているかは分かりませんが、ここでは json 形式でファイルに保存するようにしました。\n\n{ \"user-pool-id-hoge\": { \"username-hoge\": { \"uuid\": \"\n208b377c-e86e-3f1d-a23c-cdab84d86901\", \"password\": \"password\", \"username\": \"\nusername-hoge\", \"email\": \"email@example.com\", \"email_verified\": true } } } view\nraw\n[https://gist.github.com/yutakahashi114/3cbf0c3f69770d1dbe45648d011c5e9a/raw/acad96791dac283e662f4cdad3d9da6e99312760/cognito_user_pool.json]\n cognito_user_pool.json\n[https://gist.github.com/yutakahashi114/3cbf0c3f69770d1dbe45648d011c5e9a#file-cognito_user_pool-json]\nhosted with ❤ by GitHub [https://github.com] import ( \"encoding/json\" \"fmt\" \n\"sync\" ) const poolFileName = \"pool.json\" func main() { data, err := ioutil.\nReadFile(poolFileName) if err != nil { panic(err) } poolMap := make(map[\nUserPoolID]UserMap) err = json.Unmarshal(data, &poolMap) if err != nil { panic(\nerr) } userPool = UserPool{ poolMap: poolMap, mutex: &sync.Mutex{}, } ... } type \n User struct { UUID string `json:\"uuid\"` Password string `json:\"password\"` \nUsername Username `json:\"username\"` Email string `json:\"email\"` EmailVerified \nbool `json:\"email_verified\"` } type Username string type UserMap map[Username]*\nUser type UserPoolID string type UserPool struct { poolMap map[UserPoolID]\nUserMap mutex *sync.Mutex } func (pool UserPool) GetUser(userPoolID UserPoolID, \nusername Username) (*User, bool) { pool.mutex.Lock() defer pool.mutex.Unlock() \nreturn pool.getUser(userPoolID, username) } func (pool UserPool) getUser(\nuserPoolID UserPoolID, username Username) (*User, bool) { uMap, ok := pool.\npoolMap[userPoolID] if !ok { return nil, false } u, ok := uMap[username] if !ok \n{ return nil, false } return u, true } func (pool UserPool) CreateUser(\nuserPoolID UserPoolID, user User) error { pool.mutex.Lock() defer pool.mutex.\nUnlock() uMap, ok := pool.poolMap[userPoolID] if !ok { uMap = make(UserMap) pool\n.poolMap[userPoolID] = uMap } if _, ok := uMap[user.Username]; ok { return fmt.\nErrorf(\"already exist\") } uMap[user.Username] = &user return pool.updateFile() } \nfunc (pool UserPool) updateFile() error { file, err := os.Create(poolFileName) \nif err != nil { return err } defer file.Close() content, err := json.Marshal(\npool.poolMap) if err != nil { return err } _, err = file.Write(content) return \nerr } func (pool UserPool) DeleteUser(userPoolID UserPoolID, username Username) \nerror { pool.mutex.Lock() defer pool.mutex.Unlock() if _, exist := pool.getUser(\nuserPoolID, username); exist { delete(pool.poolMap[userPoolID], username) } \nreturn pool.updateFile() } view raw\n[https://gist.github.com/yutakahashi114/76c063408fc8a79ebe643df9ad39214a/raw/01f5eafe6c352b1460605bc297607ab0a3f3e551/cognito_user_pool.go]\n cognito_user_pool.go\n[https://gist.github.com/yutakahashi114/76c063408fc8a79ebe643df9ad39214a#file-cognito_user_pool-go]\nhosted with ❤ by GitHub [https://github.com] main 実行時にpool.json を読み込み、map で保持します。map\nにユーザーを追加、削除する度にファイルを更新しています。パフォーマンスは悪そうですが、そこまで気にしてないので良しとしています。\n\nユーザー情報を拡張する場合は構造体のフィールドを追加するなどして対応できると思います。\n\nルーティング\n公開鍵の取得以外は全て同じエンドポイントですが、リクエストの識別にはヘッダを使用しています。\n\nX-Amz-Target というキーにAWSCognitoIdentityProviderService.AdminInitiateAuth \nのような形式でセットされているので、これを使います。\n\nimport ( \"fmt\" \"io/ioutil\" \"log\" \"net/http\" \"strings\" \"github.com/go-chi/chi/v5\" \n\"github.com/go-chi/render\" ) func main() { ... mux.Post(\"/\", func(w http.\nResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) if err != \nnil { render.JSON(w, r, http.StatusInternalServerError) return } defer r.Body.\nClose() out, err := route(r.Header.Get(\"X-Amz-Target\"), b) if err != nil { log.\nPrintln(err) render.JSON(w, r, http.StatusInternalServerError) return } w.\nWriteHeader(http.StatusOK) w.Write(out) }) log.Println(http.ListenAndServe(\":80\"\n, mux)) } func route(xAmzTarget string, body []byte) ([]byte, error) { targets \n:= strings.Split(xAmzTarget, \".\") if len(targets) < 2 { return nil, fmt.Errorf(\n\"invalid header\") } switch targets[1] { case \"AdminInitiateAuth\": return \nadminInitiateAuth(body) case \"AdminCreateUser\": return adminCreateUser(body) ... \n} return nil, fmt.Errorf(\"invalid operation name\") } view raw\n[https://gist.github.com/yutakahashi114/99d46c09c0d47f8bf9cf703e46ea1348/raw/e435dfb4d7bc2b65725ec6ffb91d0b368ea25574/cognito_route.go]\n cognito_route.go\n[https://gist.github.com/yutakahashi114/99d46c09c0d47f8bf9cf703e46ea1348#file-cognito_route-go]\nhosted with ❤ by GitHub [https://github.com] 認証\n公開鍵と同じように秘密鍵を読み込みます。clientID は環境変数から読み取ります。\n\nimport ( \"crypto/rsa\" \"encoding/json\" \"fmt\" \"io/ioutil\" \"log\" \"time\" \n\"github.com/aws/aws-sdk-go/service/cognitoidentityprovider\" \n\"github.com/dgrijalva/jwt-go\" ) var signKey *rsa.PrivateKey var clientID \nClientID type ClientID string func main() { ... signKey, err = getPrivateKey() \nif err != nil { panic(err) } clientID = ClientID(os.Getenv(\"CLIENT_ID\")) ... } \nfunc getPrivateKey() (*rsa.PrivateKey, error) { signBytes, err := ioutil.\nReadFile(\"./key.pem\") if err != nil { return nil, err } return jwt.\nParseRSAPrivateKeyFromPEM(signBytes) } func (u User) ToToken(userPoolID \nUserPoolID) *jwt.Token { token := jwt.New(jwt.SigningMethodRS256) token.Header[\n\"kid\"] = jwkKeyID claims := token.Claims.(jwt.MapClaims) claims[\"iat\"] = time.\nNow().Unix() claims[\"exp\"] = time.Now().Add(time.Hour * 24 * 365 * 10).Unix() \nclaims[\"sub\"] = u.UUID claims[\"email\"] = u.Email return token } func \nadminInitiateAuth(body []byte) ([]byte, error) { in := cognitoidentityprovider.\nAdminInitiateAuthInput{} err := json.Unmarshal(body, &in) if err != nil { return \n nil, err } // TODO: まだ ADMIN_NO_SRP_AUTH だけ if in.AuthFlow == nil || *in.\nAuthFlow != cognitoidentityprovider.AuthFlowTypeAdminNoSrpAuth { return nil, fmt\n.Errorf(\"invalid auth flow\") } var cID ClientID if in.ClientId != nil { cID = \nClientID(*in.ClientId) } if cID != clientID { return nil, fmt.Errorf(\"invalid\nclient id\") } var userPoolID UserPoolID if in.UserPoolId != nil { userPoolID = \nUserPoolID(*in.UserPoolId) } var username Username if u, ok := in.AuthParameters\n[\"USERNAME\"]; ok && u != nil { username = Username(*u) } u, ok := userPool.\nGetUser( userPoolID, username, ) if !ok { return nil, fmt.Errorf(\"user not\nfound\") } if !u.EmailVerified { return nil, fmt.Errorf(\"email not verified\") } \nvar password string if p, ok := in.AuthParameters[\"PASSWORD\"]; ok && p != nil { \npassword = *p } if u.Password != password { return nil, fmt.Errorf(\"password not\nmatch\") } tokenString, err := u.ToToken(userPoolID).SignedString(signKey) if err \n != nil { return nil, err } return json.Marshal(cognitoidentityprovider.\nAdminInitiateAuthOutput{ AuthenticationResult: &cognitoidentityprovider.\nAuthenticationResultType{ AccessToken: &[]string{tokenString}[0], }, }) } view\nraw\n[https://gist.github.com/yutakahashi114/794add8f02eac1fa4a1d4168df264793/raw/f36b4cdb06eb1e3902f038d96c6df45e8955b7b4/cognito_admin_initiate_auth.go]\n cognito_admin_initiate_auth.go\n[https://gist.github.com/yutakahashi114/794add8f02eac1fa4a1d4168df264793#file-cognito_admin_initiate_auth-go]\nhosted with ❤ by GitHub [https://github.com] requestBody はgithub.com/aws/aws-sdk-go/service/cognitoidentityprovider \nの構造体を使ってそのままパースできます。\n\nclaims には最低限の情報をセットしていますが、実際に使うには足りないと思うので、以下を参考に必要に応じて情報を追加します。\n\nUsing the ID Token - Amazon CognitoUsing the ID TokenAmazon Cognito\n[https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html]\n読み込んだ秘密鍵で署名し、トークン文字列に変換します。ここではAccessToken にセットしていますが、使い方によってはIdToken \n等にセットするかもしれません。\n\nユーザー作成\nimport ( \"encoding/json\" \"fmt\" \"math/rand\" \n\"github.com/aws/aws-sdk-go/service/cognitoidentityprovider\" \n\"github.com/gofrs/uuid\" ) func adminCreateUser(body []byte) ([]byte, error) { in \n := cognitoidentityprovider.AdminCreateUserInput{} err := json.Unmarshal(body, &\nin) if err != nil { return nil, err } var userPoolID UserPoolID if in.UserPoolId \n != nil { userPoolID = UserPoolID(*in.UserPoolId) } var username Username if in.\nUsername != nil { username = Username(*in.Username) } if in.MessageAction != nil \n && *in.MessageAction == \"RESEND\" { if _, exist := userPool.GetUser(userPoolID, \nusername); !exist { return nil, fmt.Errorf(\"user not found\") } // TODO:\nパスワード変更して通知メール再送信 return json.Marshal(cognitoidentityprovider.\nAdminCreateUserOutput{}) } var email string for _, attr := range in.\nUserAttributes { if attr.Name == nil || attr.Value == nil { continue } if *attr.\nName == \"email\" { email = *attr.Value } } // TODO: email_verified が true\nならパスワードメール送信, false なら検証メール送信 // 常にtrueとして扱っている if email == \"\" { return nil, fmt\n.Errorf(\"invalid email\") } id, err := uuid.NewV4() if err != nil { return nil, \nerr } pass, err := makeRandomStr(8) if err != nil { return nil, err } idString \n:= id.String() user := User{ UUID: idString, Password: pass, Username: username, \nEmail: email, EmailVerified: true, } err = userPool.CreateUser(userPoolID, user) \nif err != nil { return nil, err } return json.Marshal(cognitoidentityprovider.\nAdminCreateUserOutput{ User: &cognitoidentityprovider.UserType{ Attributes: []*\ncognitoidentityprovider.AttributeType{ { Name: &[]string{\"sub\"}[0], Value: &[]\nstring{idString}[0], }, }, }, }) } func makeRandomStr(digit uint32) (string, \nerror) { const letters = \n\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@&%/:;,.\" b := \nmake([]byte, digit) if _, err := rand.Read(b); err != nil { return \"\", err } var \n result string for _, v := range b { result += string(letters[int(v)%len(letters\n)]) } return result, nil } view raw\n[https://gist.github.com/yutakahashi114/cec3b852b6abface3fcd772cd2c13985/raw/0711f52c9476a4beccdf8f51510249cc1c6804e6/cognito_admin_create_user.go]\n cognito_admin_create_user.go\n[https://gist.github.com/yutakahashi114/cec3b852b6abface3fcd772cd2c13985#file-cognito_admin_create_user-go]\nhosted with ❤ by GitHub [https://github.com] \n全て検証済みのユーザーとして作成しています。メール送信部分は省いていますが、そのうち追加予定です。\n\nランダム文字列生成は以下を参考にしました。\n\ngolang でランダム文字列生成 - QiitaGo\nでは乱数を返すライブラリはあれど、ランダム文字列を返すライブラリがない（少なくとも今の所は）。というわけで、パスワードなどでランダムな文字列を生成したい場合は自分で書く必要がある。\nちなみに乱数を生成するには math/ra...Qiitanakaryooo\n[https://qiita.com/nakaryooo/items/7d269525a288c4b3ecda]アプリ側の設定\nCognito のクライアント生成時に、特定の環境変数を設定している場合はそちらに繋ぐように変更します。\n\nvar endpoint *string cognitoEndpoint = os.Getenv(\"COGNITO_ENDPOINT\") if \ncognitoEndpoint != \"\" { endpoint = aws.String(cognitoEndpoint) } client := \ncognitoidentityprovider.New( session.Must(session.NewSessionWithOptions(session.\nOptions{ Config: aws.Config{Endpoint: endpoint}, SharedConfigState: session.\nSharedConfigEnable, })), ) view raw\n[https://gist.github.com/yutakahashi114/9f58aedb19bfb4f8b1f2d2cc347a9428/raw/eda88469f24973dff6a9884b657c4e90a7d36c92/cognito_session_endpoint.go]\n cognito_session_endpoint.go\n[https://gist.github.com/yutakahashi114/9f58aedb19bfb4f8b1f2d2cc347a9428#file-cognito_session_endpoint-go]\nhosted with ❤ by GitHub [https://github.com] Configuring the AWS SDK for Go -\nAWS SDK for GoConfigure the |sdk-go| to specify which credentials to use and to\nwhich AWS Region to send requests.AWS SDK for Go\n[https://docs.aws.amazon.com/ja_jp/sdk-for-go/v1/developer-guide/configuring-sdk.html]\nまとめ\nすべてまとめると以下になります。コードが散らかってるのでもう少し整理したいところです…\n\n汎用的なものが作れたら Docker Hub に上げようかなと思っていましたが、中々難しそうです。\n\npackage main import ( \"crypto/rsa\" \"encoding/base64\" \"encoding/binary\" \n\"encoding/json\" \"fmt\" \"io/ioutil\" \"log\" \"math/rand\" \"net/http\" \"os\" \"strings\" \n\"sync\" \"time\" \"github.com/aws/aws-sdk-go/service/cognitoidentityprovider\" \n\"github.com/dgrijalva/jwt-go\" \"github.com/go-chi/chi/v5\" \n\"github.com/go-chi/chi/v5/middleware\" \"github.com/go-chi/render\" \n\"github.com/gofrs/uuid\" ) var userPool UserPool var clientID ClientID var \nsignKey *rsa.PrivateKey const jwkKeyID = \"hoge\" const poolFileName = \"pool.json\" \nfunc main() { data, err := ioutil.ReadFile(poolFileName) if err != nil { panic(\nerr) } poolMap := make(map[UserPoolID]UserMap) err = json.Unmarshal(data, &\npoolMap) if err != nil { panic(err) } userPool = UserPool{ poolMap: poolMap, \nmutex: &sync.Mutex{}, } clientID = ClientID(os.Getenv(\"CLIENT_ID\")) signKey, err \n = getPrivateKey() if err != nil { panic(err) } pubKeyString, err := \ngetPublicKey() if err != nil { panic(err) } mux := chi.NewRouter() mux.Use(\nmiddleware.Logger) mux.Get(\"/{userPoolID}/.well-known/jwks.json\", func(w http.\nResponseWriter, r *http.Request) { w.Write([]byte(fmt.Sprintf(`{\"keys\":[%s]}`, \npubKeyString))) }) mux.Post(\"/\", func(w http.ResponseWriter, r *http.Request) { \nb, err := ioutil.ReadAll(r.Body) if err != nil { render.JSON(w, r, http.\nStatusInternalServerError) return } defer r.Body.Close() out, err := route(r.\nHeader.Get(\"X-Amz-Target\"), b) if err != nil { log.Println(err) render.JSON(w, r\n, http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Write(\nout) }) log.Println(http.ListenAndServe(\":80\", mux)) } type User struct { UUID \nstring `json:\"uuid\"` Password string `json:\"password\"` Username Username \n`json:\"username\"` Email string `json:\"email\"` EmailVerified bool \n`json:\"email_verified\"` } func (u User) ToToken(userPoolID UserPoolID) *jwt.\nToken { token := jwt.New(jwt.SigningMethodRS256) token.Header[\"kid\"] = jwkKeyID \nclaims := token.Claims.(jwt.MapClaims) claims[\"iat\"] = time.Now().Unix() claims[\n\"exp\"] = time.Now().Add(time.Hour * 24 * 365 * 10).Unix() claims[\"sub\"] = u.UUID \nclaims[\"email\"] = u.Email return token } type ClientID string type Username \nstring type UserMap map[Username]*User type UserPoolID string type UserPool \nstruct { poolMap map[UserPoolID]UserMap mutex *sync.Mutex } func (pool UserPool) \nGetUser(userPoolID UserPoolID, username Username) (*User, bool) { pool.mutex.\nLock() defer pool.mutex.Unlock() return pool.getUser(userPoolID, username) } \nfunc (pool UserPool) getUser(userPoolID UserPoolID, username Username) (*User, \nbool) { uMap, ok := pool.poolMap[userPoolID] if !ok { return nil, false } u, ok \n:= uMap[username] if !ok { return nil, false } return u, true } func (pool \nUserPool) CreateUser(userPoolID UserPoolID, user User) error { pool.mutex.Lock() \ndefer pool.mutex.Unlock() uMap, ok := pool.poolMap[userPoolID] if !ok { uMap = \nmake(UserMap) pool.poolMap[userPoolID] = uMap } if _, ok := uMap[user.Username]; \nok { return fmt.Errorf(\"already exist\") } uMap[user.Username] = &user return \npool.updateFile() } func (pool UserPool) updateFile() error { file, err := os.\nCreate(poolFileName) if err != nil { return err } defer file.Close() content, \nerr := json.Marshal(pool.poolMap) if err != nil { return err } _, err = file.\nWrite(content) return err } func (pool UserPool) DeleteUser(userPoolID \nUserPoolID, username Username) error { pool.mutex.Lock() defer pool.mutex.Unlock\n() if _, exist := pool.getUser(userPoolID, username); exist { delete(pool.\npoolMap[userPoolID], username) } return pool.updateFile() } type jwkKey struct { \nAlg string `json:\"alg\"` E string `json:\"e\"` Kid string `json:\"kid\"` Kty string \n`json:\"kty\"` N string `json:\"n\"` Use string `json:\"use\"` } func getPublicKey() (\nstring, error) { verifyBytes, err := ioutil.ReadFile(\"./key.pem.pub.pkcs8\") if \nerr != nil { return \"\", err } verifyKey, err := jwt.ParseRSAPublicKeyFromPEM(\nverifyBytes) if err != nil { return \"\", err } encodedN := base64.RawURLEncoding.\nEncodeToString(verifyKey.N.Bytes()) bytesE := make([]byte, 4) binary.BigEndian.\nPutUint32(bytesE, uint32(verifyKey.E)) encodedE := base64.RawURLEncoding.\nEncodeToString(bytesE) pubKey, err := json.Marshal(jwkKey{ Alg: jwt.\nSigningMethodRS256.Alg(), E: encodedE, Kid: jwkKeyID, Kty: \"RSA\", N: encodedN, \nUse: \"sig\", }) if err != nil { return \"\", err } return string(pubKey), nil } \nfunc getPrivateKey() (*rsa.PrivateKey, error) { signBytes, err := ioutil.\nReadFile(\"./key.pem\") if err != nil { return nil, err } return jwt.\nParseRSAPrivateKeyFromPEM(signBytes) } func route(xAmzTarget string, body []byte\n) ([]byte, error) { log.Println(xAmzTarget) targets := strings.Split(xAmzTarget, \n\".\") if len(targets) < 2 { return nil, fmt.Errorf(\"invalid header\") } switch \ntargets[1] { case \"AdminInitiateAuth\": return adminInitiateAuth(body) case \n\"AdminCreateUser\": return adminCreateUser(body) } return nil, fmt.Errorf(\n\"invalid operation name\") } func adminInitiateAuth(body []byte) ([]byte, error)\n{ in := cognitoidentityprovider.AdminInitiateAuthInput{} err := json.Unmarshal(\nbody, &in) if err != nil { return nil, err } // TODO: まだ ADMIN_NO_SRP_AUTH だけ if \n in.AuthFlow == nil || *in.AuthFlow != cognitoidentityprovider.\nAuthFlowTypeAdminNoSrpAuth { return nil, fmt.Errorf(\"invalid auth flow\") } var \ncID ClientID if in.ClientId != nil { cID = ClientID(*in.ClientId) } if cID != \nclientID { return nil, fmt.Errorf(\"invalid client id\") } var userPoolID \nUserPoolID if in.UserPoolId != nil { userPoolID = UserPoolID(*in.UserPoolId) } \nvar username Username if u, ok := in.AuthParameters[\"USERNAME\"]; ok && u != nil \n{ username = Username(*u) } u, ok := userPool.GetUser( userPoolID, username, ) \nif !ok { return nil, fmt.Errorf(\"user not found\") } if !u.EmailVerified { return \n nil, fmt.Errorf(\"email not verified\") } var password string if p, ok := in.\nAuthParameters[\"PASSWORD\"]; ok && p != nil { password = *p } if u.Password != \npassword { return nil, fmt.Errorf(\"password not match\") } tokenString, err := u.\nToToken(userPoolID).SignedString(signKey) if err != nil { return nil, err } \nreturn json.Marshal(cognitoidentityprovider.AdminInitiateAuthOutput{ \nAuthenticationResult: &cognitoidentityprovider.AuthenticationResultType{ \nAccessToken: &[]string{tokenString}[0], }, }) } func adminCreateUser(body []byte\n) ([]byte, error) { in := cognitoidentityprovider.AdminCreateUserInput{} err := \njson.Unmarshal(body, &in) if err != nil { return nil, err } var userPoolID \nUserPoolID if in.UserPoolId != nil { userPoolID = UserPoolID(*in.UserPoolId) } \nvar username Username if in.Username != nil { username = Username(*in.Username) \n} if in.MessageAction != nil && *in.MessageAction == \"RESEND\" { if _, exist := \nuserPool.GetUser(userPoolID, username); !exist { return nil, fmt.Errorf(\"user\nnot found\") } // TODO: パスワード変更して通知メール再送信 return json.Marshal\n(cognitoidentityprovider.AdminCreateUserOutput{}) } var email string for _, attr \n := range in.UserAttributes { if attr.Name == nil || attr.Value == nil { \ncontinue } if *attr.Name == \"email\" { email = *attr.Value } } // TODO:\nemail_verified が true ならパスワードメール送信, false なら検証メール送信 // 常にtrueとして扱っている if email \n== \"\" { return nil, fmt.Errorf(\"invalid email\") } id, err := uuid.NewV4() if err \n != nil { return nil, err } pass, err := makeRandomStr(8) if err != nil { return \n nil, err } idString := id.String() user := User{ UUID: idString, Password: pass\n, Username: username, Email: email, EmailVerified: true, } err = userPool.\nCreateUser(userPoolID, user) if err != nil { return nil, err } return json.\nMarshal(cognitoidentityprovider.AdminCreateUserOutput{ User: &\ncognitoidentityprovider.UserType{ Attributes: []*cognitoidentityprovider.\nAttributeType{ { Name: &[]string{\"sub\"}[0], Value: &[]string{idString}[0], }, }, \n}, }) } func makeRandomStr(digit uint32) (string, error) { const letters = \n\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@&%/:;,.\" b := \nmake([]byte, digit) if _, err := rand.Read(b); err != nil { return \"\", err } var \n result string for _, v := range b { result += string(letters[int(v)%len(letters\n)]) } return result, nil } view raw\n[https://gist.github.com/yutakahashi114/c2205e6feb06cad3bee470b665a0dd33/raw/a7c159f9563c64a9bcd7a07d7338bf6024cd371b/cognito_mock.go]\n cognito_mock.go\n[https://gist.github.com/yutakahashi114/c2205e6feb06cad3bee470b665a0dd33#file-cognito_mock-go]\nhosted with ❤ by GitHub [https://github.com]","html":"<!--kg-card-begin: markdown--><p>自分が関わっているサービスで、認証に Amazon Cognito を使っています。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://aws.amazon.com/jp/cognito/\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Amazon Cognito（ウェブ/モバイルアプリのユーザー管理）| AWS</div><div class=\"kg-bookmark-description\"></div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://a0.awsstatic.com/libra-css/images/site/touch-icon-ipad-144-smile.png\"><span class=\"kg-bookmark-author\">Amazon Web Services, Inc.</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png\"></div></a></figure><!--kg-card-begin: markdown--><p>Cognito は公式でエミュレータ的なものは提供されていないようなので、ローカル環境では開発用の Cognito に繋いでいます。</p>\n<p>実物の Cognito を使う場合、メールをモックサーバに飛ばせないので誤送信の可能性があったり、ユーザーの追加が面倒だったりと、個人的に不便を感じていました。</p>\n<p>そのため、Cognito の動きを再現するエミュレータを作りました。</p>\n<p>今回は自分が必要な最低限の機能だけ実装しています。足りない機能は適宜追加するつもりです。</p>\n<p>とりあえず以下の機能を実装しました。</p>\n<ul>\n<li>公開鍵の取得</li>\n<li>認証</li>\n<li>ユーザー作成</li>\n</ul>\n<h2 id=\"%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88\">エンドポイント</h2>\n<p>Cognito のエンドポイントは恐らく以下の2つだけです。</p>\n<pre><code>1. GET https://cognito-idp.{region}.amazonaws.com/{user-pool-id}/.well-known/jwks.json\n2. POST https://cognito-idp.{region}.amazonaws.com/\n</code></pre>\n<ol>\n<li>は公開鍵の取得、2. はそれ以外の操作（認証やユーザーの作成、削除）に使います。</li>\n</ol>\n<h2 id=\"%E5%85%AC%E9%96%8B%E9%8D%B5%E3%81%AE%E5%8F%96%E5%BE%97\">公開鍵の取得</h2>\n<ol>\n<li>のエンドポイントを叩くと、以下のような json が返ってきます。</li>\n</ol>\n<pre><code>{  \n  &quot;keys&quot;: [  \n    {  \n      &quot;alg&quot;: &quot;RS256&quot;,  \n      &quot;e&quot;: &quot;XXXX&quot;,  \n      &quot;kid&quot;: &quot;xxxxkid&quot;,  \n      &quot;kty&quot;: &quot;RSA&quot;,  \n      &quot;n&quot;: &quot;xxxx...&quot;,  \n      &quot;use&quot;: &quot;sig&quot;  \n    },\n    ...\n  ]  \n}\n</code></pre>\n<p>RSA で暗号化しているようなので、まずは鍵を作成します。以下を参考にしました。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://qiita.com/wh1teB0x/items/e2133eeb94f57629b5e7\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">jwt-goを用いた、GolangでのJWTの発行、認証について - Qiita</div><div class=\"kg-bookmark-description\">GolangでJWT（JSON Web Token）を取り扱いたいと思い、jwt-goの使い方を調べました。 JWTについての説明は他の有益な解説サイトがあるので、そちらを参考にして下さい。 早速実装の説明に入ります。 Rou...</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.qiita.com/assets/favicons/public/apple-touch-icon-ec5ba42a24ae923f16825592efdc356f.png\"><span class=\"kg-bookmark-author\">Qiita</span><span class=\"kg-bookmark-publisher\">wh1teB0x</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-1150d8b18a7c15795b701a55ae908f94.png?ixlib&#x3D;rb-4.0.0&amp;w&#x3D;1200&amp;mark64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTM4MCZ0eHQ2ND1hbmQwTFdkdjQ0S1M1NVNvNDRHRTQ0R2Y0NENCUjI5c1lXNW40NEduNDRHdVNsZFU0NEd1NTVtNjZLR000NENCNktxTjZLaTg0NEdyNDRHazQ0R0U0NEdtJnR4dC1jb2xvcj0lMjMzMzMmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTQmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWNlbnRlciUyQ21pZGRsZSZzPWUxNWE4MWY2MTM4Mjc0NTNhYzA3NmM0Y2FjMzUzYzQz&amp;mark-align&#x3D;center%2Cmiddle&amp;blend64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTUwMCZ0eHQ2ND1RSGRvTVhSbFFqQjQmdHh0LWNvbG9yPSUyMzMzMyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT00NSZ0eHQtYWxpZ249cmlnaHQlMkNib3R0b20mcz0xM2E3Mzk1NTMyZGJmZDVjMmQ2YWRlNGNmYzdiNDczMg&amp;blend-align&#x3D;center%2Cmiddle&amp;blend-mode&#x3D;normal&amp;s&#x3D;691ce4b4ba3509891bad67290d63de81\"></div></a></figure><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://stackoverflow.com/questions/55470311/encode-private-key-getting-error-asn1-structure-error-tags-dont-match\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Encode Private Key getting Error: asn1: structure error: tags don’t match</div><div class=\"kg-bookmark-description\">When i try to parses the encode private key with sample private key -----BEGIN OPENSSH PRIVATE KEY-----b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v&#x3D;c78bd457575a\"><span class=\"kg-bookmark-author\">Stack Overflow</span><span class=\"kg-bookmark-publisher\">Black_Dreams</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon@2.png?v&#x3D;73d79a89bded\"></div></a></figure><!--kg-card-begin: markdown--><p>ターミナルで以下を実行します。</p>\n<pre><code>$ ssh-keygen -t rsa -f key.pem -m pem  \n$ ssh-keygen -f key.pem.pub -e -m pkcs8 &gt; key.pem.pub.pkcs8\n</code></pre>\n<p><code>key.pem</code> が秘密鍵、<code>key.pem.pub.pkcs8</code> が公開鍵です。</p>\n<p><code>key.pem.pub.pkcs8</code>を以下のように読み込んで整形します。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/01ad8e5ae7e1a3f886f4be4f6b217ec1.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110338074\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_public_key-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_public_key-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_public_key-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/base64&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_public_key-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/binary&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_public_key-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_public_key-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;io/ioutil&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_public_key-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_public_key-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/dgrijalva/jwt-go&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_public_key-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_public_key-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_public_key-go-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>const</span> <span class=pl-s1>jwkKeyID</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;hoge&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_public_key-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_public_key-go-LC12\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>jwkKey</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_public_key-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Alg</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;alg&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_public_key-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>E</span>   <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;e&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_public_key-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Kid</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;kid&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_public_key-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Kty</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;kty&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_public_key-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>N</span>   <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;n&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_public_key-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Use</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;use&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_public_key-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_public_key-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_public_key-go-LC21\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>getPublicKey</span>() (<span class=pl-smi>string</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_public_key-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>verifyBytes</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s>&quot;./key.pem.pub.pkcs8&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_public_key-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_public_key-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_public_key-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_public_key-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>verifyKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>jwt</span>.<span class=pl-en>ParseRSAPublicKeyFromPEM</span>(<span class=pl-s1>verifyBytes</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_public_key-go-LC27\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_public_key-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_public_key-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_public_key-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_public_key-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>encodedN</span> <span class=pl-c1>:=</span> <span class=pl-s1>base64</span>.<span class=pl-c1>RawURLEncoding</span>.<span class=pl-en>EncodeToString</span>(<span class=pl-s1>verifyKey</span>.<span class=pl-c1>N</span>.<span class=pl-en>Bytes</span>())</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_public_key-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_public_key-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>bytesE</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>([]<span class=pl-smi>byte</span>, <span class=pl-c1>4</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_public_key-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>binary</span>.<span class=pl-c1>BigEndian</span>.<span class=pl-en>PutUint32</span>(<span class=pl-s1>bytesE</span>, <span class=pl-en>uint32</span>(<span class=pl-s1>verifyKey</span>.<span class=pl-c1>E</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_public_key-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_public_key-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>encodedE</span> <span class=pl-c1>:=</span> <span class=pl-s1>base64</span>.<span class=pl-c1>RawURLEncoding</span>.<span class=pl-en>EncodeToString</span>(<span class=pl-s1>bytesE</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_public_key-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_public_key-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pubKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(<span class=pl-smi>jwkKey</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_public_key-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Alg</span>: <span class=pl-s1>jwt</span>.<span class=pl-c1>SigningMethodRS256</span>.<span class=pl-en>Alg</span>(),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_public_key-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>E</span>:   <span class=pl-s1>encodedE</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_public_key-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Kid</span>: <span class=pl-s1>jwkKeyID</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_public_key-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Kty</span>: <span class=pl-s>&quot;RSA&quot;</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_public_key-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>N</span>:   <span class=pl-s1>encodedN</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_public_key-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Use</span>: <span class=pl-s>&quot;sig&quot;</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_public_key-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_public_key-go-LC46\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_public_key-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_public_key-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_public_key-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-en>string</span>(<span class=pl-s1>pubKey</span>), <span class=pl-c1>nil</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_public_key-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/01ad8e5ae7e1a3f886f4be4f6b217ec1/raw/ee469b087678297a60343a573ba7239b934bf737/cognito_public_key.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/01ad8e5ae7e1a3f886f4be4f6b217ec1#file-cognito_public_key-go\">cognito_public_key.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p><code>kid</code> は鍵を識別するための ID ですが、後述する token の header にセットした値と一致していれば何でも良いです。</p>\n<p>整形した鍵を json で返すエンドポイントを作成します。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/5efe826eef370b141e479336da674600.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110338133\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_public_key_endpoint-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;log&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;net/http&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/chi/v5&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/chi/v5/middleware&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pubKeyString</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>getPublicKey</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span> <span class=pl-c1>:=</span> <span class=pl-s1>chi</span>.<span class=pl-en>NewRouter</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Use</span>(<span class=pl-s1>middleware</span>.<span class=pl-c1>Logger</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">  </td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Get</span>(<span class=pl-s>&quot;/{userPoolID}/.well-known/jwks.json&quot;</span>, <span class=pl-k>func</span>(<span class=pl-s1>w</span> http.<span class=pl-smi>ResponseWriter</span>, <span class=pl-s1>r</span> <span class=pl-c1>*</span>http.<span class=pl-smi>Request</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>Write</span>([]<span class=pl-smi>byte</span>(<span class=pl-s1>fmt</span>.<span class=pl-en>Sprintf</span>(<span class=pl-s>`{&quot;keys&quot;:[%s]}`</span>, <span class=pl-s1>pubKeyString</span>)))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">  </td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>http</span>.<span class=pl-en>ListenAndServe</span>(<span class=pl-s>&quot;:80&quot;</span>, <span class=pl-s1>mux</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_public_key_endpoint-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_public_key_endpoint-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/5efe826eef370b141e479336da674600/raw/9f48f8bb74e659257c1e17b93f33609753d0a5d3/cognito_public_key_endpoint.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/5efe826eef370b141e479336da674600#file-cognito_public_key_endpoint-go\">cognito_public_key_endpoint.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>恐らく実際は<code>userPoolID</code> ごとに異なる鍵を返していると思いますが、面倒なので全ての ID で同じ 鍵を返しています。</p>\n<p>これで公開鍵の取得エンドポイントは完成です。</p>\n<h2 id=\"%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E6%83%85%E5%A0%B1\">ユーザー情報</h2>\n<p>実際にどんな感じで保存しているかは分かりませんが、ここでは json 形式でファイルに保存するようにしました。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/3cbf0c3f69770d1dbe45648d011c5e9a.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110338456\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_user_pool-json\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-json  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_user_pool-json-LC1\" class=\"blob-code blob-code-inner js-file-line\">{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_user_pool-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>user-pool-id-hoge<span class=\"pl-pds\">&quot;</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_user_pool-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>username-hoge<span class=\"pl-pds\">&quot;</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_user_pool-json-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>uuid<span class=\"pl-pds\">&quot;</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>208b377c-e86e-3f1d-a23c-cdab84d86901<span class=\"pl-pds\">&quot;</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_user_pool-json-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>password<span class=\"pl-pds\">&quot;</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>password<span class=\"pl-pds\">&quot;</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_user_pool-json-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>username<span class=\"pl-pds\">&quot;</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>username-hoge<span class=\"pl-pds\">&quot;</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_user_pool-json-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>email<span class=\"pl-pds\">&quot;</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>email@example.com<span class=\"pl-pds\">&quot;</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_user_pool-json-LC8\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=\"pl-s\"><span class=\"pl-pds\">&quot;</span>email_verified<span class=\"pl-pds\">&quot;</span></span>: <span class=\"pl-c1\">true</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_user_pool-json-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_user_pool-json-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-json-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_user_pool-json-LC11\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/3cbf0c3f69770d1dbe45648d011c5e9a/raw/acad96791dac283e662f4cdad3d9da6e99312760/cognito_user_pool.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/3cbf0c3f69770d1dbe45648d011c5e9a#file-cognito_user_pool-json\">cognito_user_pool.json</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/76c063408fc8a79ebe643df9ad39214a.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110338316\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_user_pool-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_user_pool-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_user_pool-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_user_pool-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_user_pool-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;sync&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_user_pool-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_user_pool-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_user_pool-go-LC7\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>const</span> <span class=pl-s1>poolFileName</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;pool.json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_user_pool-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_user_pool-go-LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_user_pool-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>data</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s1>poolFileName</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_user_pool-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_user_pool-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_user_pool-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_user_pool-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>poolMap</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>(<span class=pl-k>map</span>[<span class=pl-smi>UserPoolID</span>]<span class=pl-smi>UserMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_user_pool-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>data</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>poolMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_user_pool-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_user_pool-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_user_pool-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_user_pool-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>userPool</span> <span class=pl-c1>=</span> <span class=pl-smi>UserPool</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_user_pool-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>poolMap</span>: <span class=pl-s1>poolMap</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_user_pool-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>mutex</span>:   <span class=pl-c1>&amp;</span>sync.<span class=pl-smi>Mutex</span>{},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_user_pool-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_user_pool-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_user_pool-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>...</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_user_pool-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_user_pool-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_user_pool-go-LC27\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>User</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_user_pool-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>UUID</span>          <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;uuid&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_user_pool-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Password</span>      <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;password&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_user_pool-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Username</span>      <span class=pl-smi>Username</span> <span class=pl-s>`json:&quot;username&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_user_pool-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Email</span>         <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;email&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_user_pool-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>EmailVerified</span> <span class=pl-smi>bool</span>     <span class=pl-s>`json:&quot;email_verified&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_user_pool-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_user_pool-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_user_pool-go-LC35\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>Username</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_user_pool-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_user_pool-go-LC37\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserMap</span> <span class=pl-k>map</span>[<span class=pl-smi>Username</span>]<span class=pl-c1>*</span><span class=pl-smi>User</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_user_pool-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_user_pool-go-LC39\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserPoolID</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_user_pool-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_user_pool-go-LC41\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserPool</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_user_pool-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>poolMap</span> <span class=pl-k>map</span>[<span class=pl-smi>UserPoolID</span>]<span class=pl-smi>UserMap</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_user_pool-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>mutex</span>   <span class=pl-c1>*</span>sync.<span class=pl-smi>Mutex</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_user_pool-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_user_pool-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_user_pool-go-LC46\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>GetUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) (<span class=pl-c1>*</span><span class=pl-smi>User</span>, <span class=pl-smi>bool</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_user_pool-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_user_pool-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_user_pool-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_user_pool-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"></td>\n        <td id=\"file-cognito_user_pool-go-LC51\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"></td>\n        <td id=\"file-cognito_user_pool-go-LC52\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) (<span class=pl-c1>*</span><span class=pl-smi>User</span>, <span class=pl-smi>bool</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"></td>\n        <td id=\"file-cognito_user_pool-go-LC53\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"></td>\n        <td id=\"file-cognito_user_pool-go-LC54\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"></td>\n        <td id=\"file-cognito_user_pool-go-LC55\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-c1>false</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"></td>\n        <td id=\"file-cognito_user_pool-go-LC56\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"></td>\n        <td id=\"file-cognito_user_pool-go-LC57\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>uMap</span>[<span class=pl-s1>username</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"></td>\n        <td id=\"file-cognito_user_pool-go-LC58\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"></td>\n        <td id=\"file-cognito_user_pool-go-LC59\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-c1>false</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"></td>\n        <td id=\"file-cognito_user_pool-go-LC60\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"></td>\n        <td id=\"file-cognito_user_pool-go-LC61\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>u</span>, <span class=pl-c1>true</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"></td>\n        <td id=\"file-cognito_user_pool-go-LC62\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"></td>\n        <td id=\"file-cognito_user_pool-go-LC63\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"></td>\n        <td id=\"file-cognito_user_pool-go-LC64\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>CreateUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>user</span> <span class=pl-smi>User</span>) <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"></td>\n        <td id=\"file-cognito_user_pool-go-LC65\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"></td>\n        <td id=\"file-cognito_user_pool-go-LC66\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"></td>\n        <td id=\"file-cognito_user_pool-go-LC67\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"></td>\n        <td id=\"file-cognito_user_pool-go-LC68\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"></td>\n        <td id=\"file-cognito_user_pool-go-LC69\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"></td>\n        <td id=\"file-cognito_user_pool-go-LC70\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>uMap</span> <span class=pl-c1>=</span> <span class=pl-en>make</span>(<span class=pl-smi>UserMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"></td>\n        <td id=\"file-cognito_user_pool-go-LC71\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>] <span class=pl-c1>=</span> <span class=pl-s1>uMap</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"></td>\n        <td id=\"file-cognito_user_pool-go-LC72\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"></td>\n        <td id=\"file-cognito_user_pool-go-LC73\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>uMap</span>[<span class=pl-s1>user</span>.<span class=pl-c1>Username</span>]; <span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"></td>\n        <td id=\"file-cognito_user_pool-go-LC74\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;already exist&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"></td>\n        <td id=\"file-cognito_user_pool-go-LC75\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"></td>\n        <td id=\"file-cognito_user_pool-go-LC76\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>[<span class=pl-s1>user</span>.<span class=pl-c1>Username</span>] <span class=pl-c1>=</span> <span class=pl-c1>&amp;</span><span class=pl-s1>user</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"></td>\n        <td id=\"file-cognito_user_pool-go-LC77\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>updateFile</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"></td>\n        <td id=\"file-cognito_user_pool-go-LC78\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"></td>\n        <td id=\"file-cognito_user_pool-go-LC79\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"></td>\n        <td id=\"file-cognito_user_pool-go-LC80\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>updateFile</span>() <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"></td>\n        <td id=\"file-cognito_user_pool-go-LC81\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>file</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>os</span>.<span class=pl-en>Create</span>(<span class=pl-s1>poolFileName</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"></td>\n        <td id=\"file-cognito_user_pool-go-LC82\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"></td>\n        <td id=\"file-cognito_user_pool-go-LC83\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"></td>\n        <td id=\"file-cognito_user_pool-go-LC84\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"></td>\n        <td id=\"file-cognito_user_pool-go-LC85\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>file</span>.<span class=pl-en>Close</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"></td>\n        <td id=\"file-cognito_user_pool-go-LC86\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>content</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"></td>\n        <td id=\"file-cognito_user_pool-go-LC87\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"></td>\n        <td id=\"file-cognito_user_pool-go-LC88\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"></td>\n        <td id=\"file-cognito_user_pool-go-LC89\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"></td>\n        <td id=\"file-cognito_user_pool-go-LC90\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>_</span>, <span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>file</span>.<span class=pl-en>Write</span>(<span class=pl-s1>content</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"></td>\n        <td id=\"file-cognito_user_pool-go-LC91\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"></td>\n        <td id=\"file-cognito_user_pool-go-LC92\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"></td>\n        <td id=\"file-cognito_user_pool-go-LC93\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"></td>\n        <td id=\"file-cognito_user_pool-go-LC94\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>DeleteUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"></td>\n        <td id=\"file-cognito_user_pool-go-LC95\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"></td>\n        <td id=\"file-cognito_user_pool-go-LC96\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"></td>\n        <td id=\"file-cognito_user_pool-go-LC97\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"></td>\n        <td id=\"file-cognito_user_pool-go-LC98\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>exist</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>); <span class=pl-s1>exist</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"></td>\n        <td id=\"file-cognito_user_pool-go-LC99\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>delete</span>(<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>], <span class=pl-s1>username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"></td>\n        <td id=\"file-cognito_user_pool-go-LC100\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"></td>\n        <td id=\"file-cognito_user_pool-go-LC101\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>updateFile</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_user_pool-go-L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"></td>\n        <td id=\"file-cognito_user_pool-go-LC102\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/76c063408fc8a79ebe643df9ad39214a/raw/01f5eafe6c352b1460605bc297607ab0a3f3e551/cognito_user_pool.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/76c063408fc8a79ebe643df9ad39214a#file-cognito_user_pool-go\">cognito_user_pool.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>main 実行時に<code>pool.json</code> を読み込み、map で保持します。map にユーザーを追加、削除する度にファイルを更新しています。パフォーマンスは悪そうですが、そこまで気にしてないので良しとしています。</p>\n<p>ユーザー情報を拡張する場合は構造体のフィールドを追加するなどして対応できると思います。</p>\n<h2 id=\"%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0\">ルーティング</h2>\n<p>公開鍵の取得以外は全て同じエンドポイントですが、リクエストの識別にはヘッダを使用しています。</p>\n<p><code>X-Amz-Target</code> というキーに<code>AWSCognitoIdentityProviderService.AdminInitiateAuth</code> のような形式でセットされているので、これを使います。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/99d46c09c0d47f8bf9cf703e46ea1348.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110338930\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_route-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_route-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_route-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_route-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_route-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;io/ioutil&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_route-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;log&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_route-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;net/http&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_route-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;strings&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_route-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_route-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/chi/v5&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_route-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/render&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_route-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_route-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_route-go-LC12\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_route-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>...</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_route-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">  </td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_route-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Post</span>(<span class=pl-s>&quot;/&quot;</span>, <span class=pl-k>func</span>(<span class=pl-s1>w</span> http.<span class=pl-smi>ResponseWriter</span>, <span class=pl-s1>r</span> <span class=pl-c1>*</span>http.<span class=pl-smi>Request</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_route-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>b</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadAll</span>(<span class=pl-s1>r</span>.<span class=pl-c1>Body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_route-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_route-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>render</span>.<span class=pl-en>JSON</span>(<span class=pl-s1>w</span>, <span class=pl-s1>r</span>, <span class=pl-s1>http</span>.<span class=pl-c1>StatusInternalServerError</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_route-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_route-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_route-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>defer</span> <span class=pl-s1>r</span>.<span class=pl-c1>Body</span>.<span class=pl-en>Close</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_route-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_route-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>out</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>route</span>(<span class=pl-s1>r</span>.<span class=pl-c1>Header</span>.<span class=pl-en>Get</span>(<span class=pl-s>&quot;X-Amz-Target&quot;</span>), <span class=pl-s1>b</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_route-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_route-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_route-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>render</span>.<span class=pl-en>JSON</span>(<span class=pl-s1>w</span>, <span class=pl-s1>r</span>, <span class=pl-s1>http</span>.<span class=pl-c1>StatusInternalServerError</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_route-go-LC27\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_route-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_route-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>WriteHeader</span>(<span class=pl-s1>http</span>.<span class=pl-c1>StatusOK</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_route-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>Write</span>(<span class=pl-s1>out</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_route-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_route-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_route-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>http</span>.<span class=pl-en>ListenAndServe</span>(<span class=pl-s>&quot;:80&quot;</span>, <span class=pl-s1>mux</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_route-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_route-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_route-go-LC36\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>route</span>(<span class=pl-s1>xAmzTarget</span> <span class=pl-smi>string</span>, <span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_route-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>targets</span> <span class=pl-c1>:=</span> <span class=pl-s1>strings</span>.<span class=pl-en>Split</span>(<span class=pl-s1>xAmzTarget</span>, <span class=pl-s>&quot;.&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_route-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-en>len</span>(<span class=pl-s1>targets</span>) <span class=pl-c1>&lt;</span> <span class=pl-c1>2</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_route-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid header&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_route-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_route-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_route-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>switch</span> <span class=pl-s1>targets</span>[<span class=pl-c1>1</span>] {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_route-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>case</span> <span class=pl-s>&quot;AdminInitiateAuth&quot;</span>:</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_route-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-en>adminInitiateAuth</span>(<span class=pl-s1>body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_route-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>case</span> <span class=pl-s>&quot;AdminCreateUser&quot;</span>:</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_route-go-LC46\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-en>adminCreateUser</span>(<span class=pl-s1>body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_route-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>...</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_route-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_route-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid operation name&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_route-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_route-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/99d46c09c0d47f8bf9cf703e46ea1348/raw/e435dfb4d7bc2b65725ec6ffb91d0b368ea25574/cognito_route.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/99d46c09c0d47f8bf9cf703e46ea1348#file-cognito_route-go\">cognito_route.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><h2 id=\"%E8%AA%8D%E8%A8%BC\">認証</h2>\n<p>公開鍵と同じように秘密鍵を読み込みます。<code>clientID</code> は環境変数から読み取ります。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/794add8f02eac1fa4a1d4168df264793.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110339314\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_admin_initiate_auth-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;crypto/rsa&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;io/ioutil&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;log&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;time&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/service/cognitoidentityprovider&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/dgrijalva/jwt-go&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC13\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>var</span> <span class=pl-s1>signKey</span> <span class=pl-c1>*</span>rsa.<span class=pl-smi>PrivateKey</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC14\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>var</span> <span class=pl-s1>clientID</span> <span class=pl-smi>ClientID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC16\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>ClientID</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">  \t<span class=pl-c1>...</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>signKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-en>getPrivateKey</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC27\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>clientID</span> <span class=pl-c1>=</span> <span class=pl-en>ClientID</span>(<span class=pl-s1>os</span>.<span class=pl-en>Getenv</span>(<span class=pl-s>&quot;CLIENT_ID&quot;</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">  \t<span class=pl-c1>...</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC32\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>getPrivateKey</span>() (<span class=pl-c1>*</span>rsa.<span class=pl-smi>PrivateKey</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>signBytes</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s>&quot;./key.pem&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>jwt</span>.<span class=pl-en>ParseRSAPrivateKeyFromPEM</span>(<span class=pl-s1>signBytes</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC40\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>u</span> <span class=pl-smi>User</span>) <span class=pl-en>ToToken</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>) <span class=pl-c1>*</span>jwt.<span class=pl-smi>Token</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>token</span> <span class=pl-c1>:=</span> <span class=pl-s1>jwt</span>.<span class=pl-en>New</span>(<span class=pl-s1>jwt</span>.<span class=pl-c1>SigningMethodRS256</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>token</span>.<span class=pl-c1>Header</span>[<span class=pl-s>&quot;kid&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>jwkKeyID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span> <span class=pl-c1>:=</span> <span class=pl-s1>token</span>.<span class=pl-c1>Claims</span>.(jwt.<span class=pl-smi>MapClaims</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;iat&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>time</span>.<span class=pl-en>Now</span>().<span class=pl-en>Unix</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC46\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;exp&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>time</span>.<span class=pl-en>Now</span>().<span class=pl-en>Add</span>(<span class=pl-s1>time</span>.<span class=pl-c1>Hour</span> <span class=pl-c1>*</span> <span class=pl-c1>24</span> <span class=pl-c1>*</span> <span class=pl-c1>365</span> <span class=pl-c1>*</span> <span class=pl-c1>10</span>).<span class=pl-en>Unix</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;sub&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>u</span>.<span class=pl-c1>UUID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;email&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>u</span>.<span class=pl-c1>Email</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>token</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC51\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC52\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>adminInitiateAuth</span>(<span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC53\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>in</span> <span class=pl-c1>:=</span> cognitoidentityprovider.<span class=pl-smi>AdminInitiateAuthInput</span>{}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC54\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>body</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>in</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC55\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC56\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC57\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC58\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// TODO: まだ ADMIN_NO_SRP_AUTH だけ</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC59\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthFlow</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>AuthFlow</span> <span class=pl-c1>!=</span> <span class=pl-s1>cognitoidentityprovider</span>.<span class=pl-c1>AuthFlowTypeAdminNoSrpAuth</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC60\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid auth flow&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC61\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC62\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC63\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>cID</span> <span class=pl-smi>ClientID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC64\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>ClientId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC65\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>cID</span> <span class=pl-c1>=</span> <span class=pl-en>ClientID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>ClientId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC66\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC67\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>cID</span> <span class=pl-c1>!=</span> <span class=pl-s1>clientID</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC68\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid client id&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC69\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC70\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC71\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC72\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC73\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span> <span class=pl-c1>=</span> <span class=pl-en>UserPoolID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC74\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC75\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>username</span> <span class=pl-smi>Username</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC76\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthParameters</span>[<span class=pl-s>&quot;USERNAME&quot;</span>]; <span class=pl-s1>ok</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-s1>u</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC77\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span> <span class=pl-c1>=</span> <span class=pl-en>Username</span>(<span class=pl-c1>*</span><span class=pl-s1>u</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC78\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC79\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>GetUser</span>(</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC80\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC81\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC82\" class=\"blob-code blob-code-inner js-file-line\">\t)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC83\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC84\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;user not found&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC85\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC86\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>u</span>.<span class=pl-c1>EmailVerified</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC87\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;email not verified&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC88\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC89\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC90\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>password</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC91\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>p</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthParameters</span>[<span class=pl-s>&quot;PASSWORD&quot;</span>]; <span class=pl-s1>ok</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-s1>p</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC92\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>password</span> <span class=pl-c1>=</span> <span class=pl-c1>*</span><span class=pl-s1>p</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC93\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC94\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>u</span>.<span class=pl-c1>Password</span> <span class=pl-c1>!=</span> <span class=pl-s1>password</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC95\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;password not match&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC96\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC97\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC98\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>tokenString</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>u</span>.<span class=pl-en>ToToken</span>(<span class=pl-s1>userPoolID</span>).<span class=pl-en>SignedString</span>(<span class=pl-s1>signKey</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC99\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC100\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC101\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC102\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminInitiateAuthOutput</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L103\" class=\"blob-num js-line-number\" data-line-number=\"103\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC103\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>AuthenticationResult</span>: <span class=pl-c1>&amp;</span>cognitoidentityprovider.<span class=pl-smi>AuthenticationResultType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L104\" class=\"blob-num js-line-number\" data-line-number=\"104\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC104\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>AccessToken</span>: <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s1>tokenString</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L105\" class=\"blob-num js-line-number\" data-line-number=\"105\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC105\" class=\"blob-code blob-code-inner js-file-line\">\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L106\" class=\"blob-num js-line-number\" data-line-number=\"106\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC106\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_initiate_auth-go-L107\" class=\"blob-num js-line-number\" data-line-number=\"107\"></td>\n        <td id=\"file-cognito_admin_initiate_auth-go-LC107\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/794add8f02eac1fa4a1d4168df264793/raw/f36b4cdb06eb1e3902f038d96c6df45e8955b7b4/cognito_admin_initiate_auth.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/794add8f02eac1fa4a1d4168df264793#file-cognito_admin_initiate_auth-go\">cognito_admin_initiate_auth.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>requestBody は<code>github.com/aws/aws-sdk-go/service/cognitoidentityprovider</code> の構造体を使ってそのままパースできます。</p>\n<p>claims には最低限の情報をセットしていますが、実際に使うには足りないと思うので、以下を参考に必要に応じて情報を追加します。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Using the ID Token - Amazon Cognito</div><div class=\"kg-bookmark-description\">Using the ID Token</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://docs.aws.amazon.com/assets/images/favicon.ico\"><span class=\"kg-bookmark-author\">Amazon Cognito</span></div></div></a></figure><!--kg-card-begin: markdown--><p>読み込んだ秘密鍵で署名し、トークン文字列に変換します。ここでは<code>AccessToken</code> にセットしていますが、使い方によっては<code>IdToken</code> 等にセットするかもしれません。</p>\n<h2 id=\"%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E4%BD%9C%E6%88%90\">ユーザー作成</h2>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/cec3b852b6abface3fcd772cd2c13985.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110339722\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_admin_create_user-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;math/rand&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/service/cognitoidentityprovider&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/gofrs/uuid&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>adminCreateUser</span>(<span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>in</span> <span class=pl-c1>:=</span> cognitoidentityprovider.<span class=pl-smi>AdminCreateUserInput</span>{}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>body</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>in</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span> <span class=pl-c1>=</span> <span class=pl-en>UserPoolID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>username</span> <span class=pl-smi>Username</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>Username</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span> <span class=pl-c1>=</span> <span class=pl-en>Username</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>Username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC26\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC27\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>MessageAction</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>MessageAction</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;RESEND&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC28\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>exist</span> <span class=pl-c1>:=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>GetUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>); <span class=pl-c1>!</span><span class=pl-s1>exist</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;user not found&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC30\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC31\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c>// TODO: パスワード変更して通知メール再送信</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminCreateUserOutput</span>{})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC33\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>email</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>for</span> <span class=pl-s1>_</span>, <span class=pl-s1>attr</span> <span class=pl-c1>:=</span> <span class=pl-k>range</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserAttributes</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>attr</span>.<span class=pl-c1>Name</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-s1>attr</span>.<span class=pl-c1>Value</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>continue</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-c1>*</span><span class=pl-s1>attr</span>.<span class=pl-c1>Name</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;email&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>email</span> <span class=pl-c1>=</span> <span class=pl-c1>*</span><span class=pl-s1>attr</span>.<span class=pl-c1>Value</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// TODO: email_verified が true ならパスワードメール送信, false なら検証メール送信</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// 常にtrueとして扱っている</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC46\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>email</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid email&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>id</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>uuid</span>.<span class=pl-en>NewV4</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC51\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC52\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC53\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC54\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pass</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>makeRandomStr</span>(<span class=pl-c1>8</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC55\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC56\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC57\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC58\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>idString</span> <span class=pl-c1>:=</span> <span class=pl-s1>id</span>.<span class=pl-en>String</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC59\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>user</span> <span class=pl-c1>:=</span> <span class=pl-smi>User</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC60\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>UUID</span>:          <span class=pl-s1>idString</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC61\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Password</span>:      <span class=pl-s1>pass</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC62\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Username</span>:      <span class=pl-s1>username</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC63\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Email</span>:         <span class=pl-s1>email</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC64\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>EmailVerified</span>: <span class=pl-c1>true</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC65\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC66\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>CreateUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>user</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC67\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC68\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC69\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC70\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC71\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminCreateUserOutput</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC72\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>User</span>: <span class=pl-c1>&amp;</span>cognitoidentityprovider.<span class=pl-smi>UserType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC73\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>Attributes</span>: []<span class=pl-c1>*</span>cognitoidentityprovider.<span class=pl-smi>AttributeType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC74\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC75\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t\t<span class=pl-c1>Name</span>:  <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s>&quot;sub&quot;</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC76\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t\t<span class=pl-c1>Value</span>: <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s1>idString</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC77\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC78\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC79\" class=\"blob-code blob-code-inner js-file-line\">\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC80\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC81\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC82\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC83\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>makeRandomStr</span>(<span class=pl-s1>digit</span> <span class=pl-smi>uint32</span>) (<span class=pl-smi>string</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC84\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>const</span> <span class=pl-s1>letters</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@&amp;%/:;,.&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC85\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC86\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>b</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>([]<span class=pl-smi>byte</span>, <span class=pl-s1>digit</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC87\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>rand</span>.<span class=pl-en>Read</span>(<span class=pl-s1>b</span>); <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC88\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC89\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC90\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC91\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>result</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC92\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>for</span> <span class=pl-s1>_</span>, <span class=pl-s1>v</span> <span class=pl-c1>:=</span> <span class=pl-k>range</span> <span class=pl-s1>b</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC93\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>result</span> <span class=pl-c1>+=</span> <span class=pl-en>string</span>(<span class=pl-s1>letters</span>[<span class=pl-en>int</span>(<span class=pl-s1>v</span>)<span class=pl-c1>%</span><span class=pl-en>len</span>(<span class=pl-s1>letters</span>)])</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC94\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC95\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>result</span>, <span class=pl-c1>nil</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_admin_create_user-go-L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"></td>\n        <td id=\"file-cognito_admin_create_user-go-LC96\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/cec3b852b6abface3fcd772cd2c13985/raw/0711f52c9476a4beccdf8f51510249cc1c6804e6/cognito_admin_create_user.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/cec3b852b6abface3fcd772cd2c13985#file-cognito_admin_create_user-go\">cognito_admin_create_user.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><!--kg-card-begin: markdown--><p>全て検証済みのユーザーとして作成しています。メール送信部分は省いていますが、そのうち追加予定です。</p>\n<p>ランダム文字列生成は以下を参考にしました。</p>\n<!--kg-card-end: markdown--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://qiita.com/nakaryooo/items/7d269525a288c4b3ecda\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">golang でランダム文字列生成 - Qiita</div><div class=\"kg-bookmark-description\">Go では乱数を返すライブラリはあれど、ランダム文字列を返すライブラリがない（少なくとも今の所は）。というわけで、パスワードなどでランダムな文字列を生成したい場合は自分で書く必要がある。 ちなみに乱数を生成するには math/ra...</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://cdn.qiita.com/assets/favicons/public/apple-touch-icon-ec5ba42a24ae923f16825592efdc356f.png\"><span class=\"kg-bookmark-author\">Qiita</span><span class=\"kg-bookmark-publisher\">nakaryooo</span></div></div><div class=\"kg-bookmark-thumbnail\"><img src=\"https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-1150d8b18a7c15795b701a55ae908f94.png?ixlib&#x3D;rb-4.0.0&amp;w&#x3D;1200&amp;mark64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTM4MCZ0eHQ2ND1aMjlzWVc1bklPT0JwLU9EcWVPRHMtT0RnT09Eb09hV2gtV3RsLVdJbC1lVW4tYUlrQSZ0eHQtY29sb3I9JTIzMzMzJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU0JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1jZW50ZXIlMkNtaWRkbGUmcz05ZmU5ODRjMWVlMWRmZjVmYmU0NTc4ZTU5YTVkMzk3YQ&amp;mark-align&#x3D;center%2Cmiddle&amp;blend64&#x3D;aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTg0MCZoPTUwMCZ0eHQ2ND1RRzVoYTJGeWVXOXZidyZ0eHQtY29sb3I9JTIzMzMzJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTQ1JnR4dC1hbGlnbj1yaWdodCUyQ2JvdHRvbSZzPTRkNWQwMjQ1MWY1YzA1NWJmN2I5OTdmYjMwNzAyZjhl&amp;blend-align&#x3D;center%2Cmiddle&amp;blend-mode&#x3D;normal&amp;s&#x3D;b50a34bd31f5b462830d5198b069249d\"></div></a></figure><!--kg-card-begin: markdown--><h2 id=\"%E3%82%A2%E3%83%97%E3%83%AA%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A\">アプリ側の設定</h2>\n<p>Cognito のクライアント生成時に、特定の環境変数を設定している場合はそちらに繋ぐように変更します。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/9f58aedb19bfb4f8b1f2d2cc347a9428.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110340020\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_session_endpoint-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC1\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>endpoint</span> <span class=pl-c1>*</span><span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>cognitoEndpoint</span> <span class=pl-c1>=</span> <span class=pl-s1>os</span>.<span class=pl-en>Getenv</span>(<span class=pl-s>&quot;COGNITO_ENDPOINT&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC3\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>cognitoEndpoint</span> <span class=pl-c1>!=</span> <span class=pl-s>&quot;&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>endpoint</span> <span class=pl-c1>=</span> <span class=pl-s1>aws</span>.<span class=pl-en>String</span>(<span class=pl-s1>cognitoEndpoint</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>client</span> <span class=pl-c1>:=</span> cognitoidentityprovider.<span class=pl-smi>New</span>(</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>session</span>.<span class=pl-en>Must</span>(<span class=pl-s1>session</span>.<span class=pl-en>NewSessionWithOptions</span>(session.<span class=pl-smi>Options</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>Config</span>:            aws.<span class=pl-smi>Config</span>{<span class=pl-c1>Endpoint</span>: <span class=pl-s1>endpoint</span>},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>SharedConfigState</span>: <span class=pl-s1>session</span>.<span class=pl-c1>SharedConfigEnable</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t\t})),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_session_endpoint-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_session_endpoint-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\t)</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/9f58aedb19bfb4f8b1f2d2cc347a9428/raw/eda88469f24973dff6a9884b657c4e90a7d36c92/cognito_session_endpoint.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/9f58aedb19bfb4f8b1f2d2cc347a9428#file-cognito_session_endpoint-go\">cognito_session_endpoint.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html--><figure class=\"kg-card kg-bookmark-card\"><a class=\"kg-bookmark-container\" href=\"https://docs.aws.amazon.com/ja_jp/sdk-for-go/v1/developer-guide/configuring-sdk.html\"><div class=\"kg-bookmark-content\"><div class=\"kg-bookmark-title\">Configuring the AWS SDK for Go - AWS SDK for Go</div><div class=\"kg-bookmark-description\">Configure the |sdk-go| to specify which credentials to use and to which AWS Region to send requests.</div><div class=\"kg-bookmark-metadata\"><img class=\"kg-bookmark-icon\" src=\"https://docs.aws.amazon.com/assets/images/favicon.ico\"><span class=\"kg-bookmark-author\">AWS SDK for Go</span></div></div></a></figure><!--kg-card-begin: markdown--><h2 id=\"%E3%81%BE%E3%81%A8%E3%82%81\">まとめ</h2>\n<p>すべてまとめると以下になります。コードが散らかってるのでもう少し整理したいところです…</p>\n<p>汎用的なものが作れたら Docker Hub に上げようかなと思っていましたが、中々難しそうです。</p>\n<!--kg-card-end: markdown--><!--kg-card-begin: html--><!--<script src=\"https://gist.github.com/yutakahashi114/c2205e6feb06cad3bee470b665a0dd33.js\"></script>-->\n<link rel=\"stylesheet\" href=\"https://github.githubassets.com/assets/gist-embed-f4c129808d1ba845285e410431c00f6d.css\">\n<div id=\"gist110339821\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cognito_mock-go\" class=\"file my-2\">\n    \n  <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-go  \">\n\n      \n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip>\n      <tr>\n        <td id=\"file-cognito_mock-go-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cognito_mock-go-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>package</span> main</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-cognito_mock-go-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-cognito_mock-go-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>import</span> (</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-cognito_mock-go-LC4\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;crypto/rsa&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-cognito_mock-go-LC5\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/base64&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-cognito_mock-go-LC6\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/binary&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-cognito_mock-go-LC7\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;encoding/json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-cognito_mock-go-LC8\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;fmt&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-cognito_mock-go-LC9\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;io/ioutil&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-cognito_mock-go-LC10\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;log&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-cognito_mock-go-LC11\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;math/rand&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-cognito_mock-go-LC12\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;net/http&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-cognito_mock-go-LC13\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;os&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-cognito_mock-go-LC14\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;strings&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-cognito_mock-go-LC15\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;sync&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-cognito_mock-go-LC16\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;time&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-cognito_mock-go-LC17\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-cognito_mock-go-LC18\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/aws/aws-sdk-go/service/cognitoidentityprovider&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"></td>\n        <td id=\"file-cognito_mock-go-LC19\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/dgrijalva/jwt-go&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"></td>\n        <td id=\"file-cognito_mock-go-LC20\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/chi/v5&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"></td>\n        <td id=\"file-cognito_mock-go-LC21\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/chi/v5/middleware&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"></td>\n        <td id=\"file-cognito_mock-go-LC22\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/go-chi/render&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"></td>\n        <td id=\"file-cognito_mock-go-LC23\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s>&quot;github.com/gofrs/uuid&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"></td>\n        <td id=\"file-cognito_mock-go-LC24\" class=\"blob-code blob-code-inner js-file-line\">)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"></td>\n        <td id=\"file-cognito_mock-go-LC25\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"></td>\n        <td id=\"file-cognito_mock-go-LC26\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>var</span> <span class=pl-s1>userPool</span> <span class=pl-smi>UserPool</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"></td>\n        <td id=\"file-cognito_mock-go-LC27\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>var</span> <span class=pl-s1>clientID</span> <span class=pl-smi>ClientID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"></td>\n        <td id=\"file-cognito_mock-go-LC28\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>var</span> <span class=pl-s1>signKey</span> <span class=pl-c1>*</span>rsa.<span class=pl-smi>PrivateKey</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"></td>\n        <td id=\"file-cognito_mock-go-LC29\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"></td>\n        <td id=\"file-cognito_mock-go-LC30\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>const</span> <span class=pl-s1>jwkKeyID</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;hoge&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"></td>\n        <td id=\"file-cognito_mock-go-LC31\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>const</span> <span class=pl-s1>poolFileName</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;pool.json&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"></td>\n        <td id=\"file-cognito_mock-go-LC32\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"></td>\n        <td id=\"file-cognito_mock-go-LC33\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>main</span>() {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"></td>\n        <td id=\"file-cognito_mock-go-LC34\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>data</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s1>poolFileName</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"></td>\n        <td id=\"file-cognito_mock-go-LC35\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"></td>\n        <td id=\"file-cognito_mock-go-LC36\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"></td>\n        <td id=\"file-cognito_mock-go-LC37\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"></td>\n        <td id=\"file-cognito_mock-go-LC38\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>poolMap</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>(<span class=pl-k>map</span>[<span class=pl-smi>UserPoolID</span>]<span class=pl-smi>UserMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"></td>\n        <td id=\"file-cognito_mock-go-LC39\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>data</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>poolMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"></td>\n        <td id=\"file-cognito_mock-go-LC40\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"></td>\n        <td id=\"file-cognito_mock-go-LC41\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"></td>\n        <td id=\"file-cognito_mock-go-LC42\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"></td>\n        <td id=\"file-cognito_mock-go-LC43\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>userPool</span> <span class=pl-c1>=</span> <span class=pl-smi>UserPool</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"></td>\n        <td id=\"file-cognito_mock-go-LC44\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>poolMap</span>: <span class=pl-s1>poolMap</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"></td>\n        <td id=\"file-cognito_mock-go-LC45\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>mutex</span>:   <span class=pl-c1>&amp;</span>sync.<span class=pl-smi>Mutex</span>{},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"></td>\n        <td id=\"file-cognito_mock-go-LC46\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"></td>\n        <td id=\"file-cognito_mock-go-LC47\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"></td>\n        <td id=\"file-cognito_mock-go-LC48\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>clientID</span> <span class=pl-c1>=</span> <span class=pl-en>ClientID</span>(<span class=pl-s1>os</span>.<span class=pl-en>Getenv</span>(<span class=pl-s>&quot;CLIENT_ID&quot;</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"></td>\n        <td id=\"file-cognito_mock-go-LC49\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"></td>\n        <td id=\"file-cognito_mock-go-LC50\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>signKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-en>getPrivateKey</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"></td>\n        <td id=\"file-cognito_mock-go-LC51\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"></td>\n        <td id=\"file-cognito_mock-go-LC52\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"></td>\n        <td id=\"file-cognito_mock-go-LC53\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"></td>\n        <td id=\"file-cognito_mock-go-LC54\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"></td>\n        <td id=\"file-cognito_mock-go-LC55\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pubKeyString</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>getPublicKey</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"></td>\n        <td id=\"file-cognito_mock-go-LC56\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"></td>\n        <td id=\"file-cognito_mock-go-LC57\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>panic</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"></td>\n        <td id=\"file-cognito_mock-go-LC58\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"></td>\n        <td id=\"file-cognito_mock-go-LC59\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"></td>\n        <td id=\"file-cognito_mock-go-LC60\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span> <span class=pl-c1>:=</span> <span class=pl-s1>chi</span>.<span class=pl-en>NewRouter</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"></td>\n        <td id=\"file-cognito_mock-go-LC61\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Use</span>(<span class=pl-s1>middleware</span>.<span class=pl-c1>Logger</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"></td>\n        <td id=\"file-cognito_mock-go-LC62\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Get</span>(<span class=pl-s>&quot;/{userPoolID}/.well-known/jwks.json&quot;</span>, <span class=pl-k>func</span>(<span class=pl-s1>w</span> http.<span class=pl-smi>ResponseWriter</span>, <span class=pl-s1>r</span> <span class=pl-c1>*</span>http.<span class=pl-smi>Request</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"></td>\n        <td id=\"file-cognito_mock-go-LC63\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>Write</span>([]<span class=pl-smi>byte</span>(<span class=pl-s1>fmt</span>.<span class=pl-en>Sprintf</span>(<span class=pl-s>`{&quot;keys&quot;:[%s]}`</span>, <span class=pl-s1>pubKeyString</span>)))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"></td>\n        <td id=\"file-cognito_mock-go-LC64\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"></td>\n        <td id=\"file-cognito_mock-go-LC65\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>mux</span>.<span class=pl-en>Post</span>(<span class=pl-s>&quot;/&quot;</span>, <span class=pl-k>func</span>(<span class=pl-s1>w</span> http.<span class=pl-smi>ResponseWriter</span>, <span class=pl-s1>r</span> <span class=pl-c1>*</span>http.<span class=pl-smi>Request</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"></td>\n        <td id=\"file-cognito_mock-go-LC66\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>b</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadAll</span>(<span class=pl-s1>r</span>.<span class=pl-c1>Body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"></td>\n        <td id=\"file-cognito_mock-go-LC67\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"></td>\n        <td id=\"file-cognito_mock-go-LC68\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>render</span>.<span class=pl-en>JSON</span>(<span class=pl-s1>w</span>, <span class=pl-s1>r</span>, <span class=pl-s1>http</span>.<span class=pl-c1>StatusInternalServerError</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"></td>\n        <td id=\"file-cognito_mock-go-LC69\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"></td>\n        <td id=\"file-cognito_mock-go-LC70\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"></td>\n        <td id=\"file-cognito_mock-go-LC71\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>defer</span> <span class=pl-s1>r</span>.<span class=pl-c1>Body</span>.<span class=pl-en>Close</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"></td>\n        <td id=\"file-cognito_mock-go-LC72\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"></td>\n        <td id=\"file-cognito_mock-go-LC73\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>out</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>route</span>(<span class=pl-s1>r</span>.<span class=pl-c1>Header</span>.<span class=pl-en>Get</span>(<span class=pl-s>&quot;X-Amz-Target&quot;</span>), <span class=pl-s1>b</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"></td>\n        <td id=\"file-cognito_mock-go-LC74\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"></td>\n        <td id=\"file-cognito_mock-go-LC75\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>err</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"></td>\n        <td id=\"file-cognito_mock-go-LC76\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>render</span>.<span class=pl-en>JSON</span>(<span class=pl-s1>w</span>, <span class=pl-s1>r</span>, <span class=pl-s1>http</span>.<span class=pl-c1>StatusInternalServerError</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"></td>\n        <td id=\"file-cognito_mock-go-LC77\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"></td>\n        <td id=\"file-cognito_mock-go-LC78\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"></td>\n        <td id=\"file-cognito_mock-go-LC79\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>WriteHeader</span>(<span class=pl-s1>http</span>.<span class=pl-c1>StatusOK</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"></td>\n        <td id=\"file-cognito_mock-go-LC80\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>w</span>.<span class=pl-en>Write</span>(<span class=pl-s1>out</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"></td>\n        <td id=\"file-cognito_mock-go-LC81\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"></td>\n        <td id=\"file-cognito_mock-go-LC82\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"></td>\n        <td id=\"file-cognito_mock-go-LC83\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>http</span>.<span class=pl-en>ListenAndServe</span>(<span class=pl-s>&quot;:80&quot;</span>, <span class=pl-s1>mux</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"></td>\n        <td id=\"file-cognito_mock-go-LC84\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"></td>\n        <td id=\"file-cognito_mock-go-LC85\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"></td>\n        <td id=\"file-cognito_mock-go-LC86\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>User</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"></td>\n        <td id=\"file-cognito_mock-go-LC87\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>UUID</span>          <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;uuid&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"></td>\n        <td id=\"file-cognito_mock-go-LC88\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Password</span>      <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;password&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"></td>\n        <td id=\"file-cognito_mock-go-LC89\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Username</span>      <span class=pl-smi>Username</span> <span class=pl-s>`json:&quot;username&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"></td>\n        <td id=\"file-cognito_mock-go-LC90\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Email</span>         <span class=pl-smi>string</span>   <span class=pl-s>`json:&quot;email&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"></td>\n        <td id=\"file-cognito_mock-go-LC91\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>EmailVerified</span> <span class=pl-smi>bool</span>     <span class=pl-s>`json:&quot;email_verified&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"></td>\n        <td id=\"file-cognito_mock-go-LC92\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"></td>\n        <td id=\"file-cognito_mock-go-LC93\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"></td>\n        <td id=\"file-cognito_mock-go-LC94\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>u</span> <span class=pl-smi>User</span>) <span class=pl-en>ToToken</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>) <span class=pl-c1>*</span>jwt.<span class=pl-smi>Token</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"></td>\n        <td id=\"file-cognito_mock-go-LC95\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>token</span> <span class=pl-c1>:=</span> <span class=pl-s1>jwt</span>.<span class=pl-en>New</span>(<span class=pl-s1>jwt</span>.<span class=pl-c1>SigningMethodRS256</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"></td>\n        <td id=\"file-cognito_mock-go-LC96\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>token</span>.<span class=pl-c1>Header</span>[<span class=pl-s>&quot;kid&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>jwkKeyID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"></td>\n        <td id=\"file-cognito_mock-go-LC97\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"></td>\n        <td id=\"file-cognito_mock-go-LC98\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span> <span class=pl-c1>:=</span> <span class=pl-s1>token</span>.<span class=pl-c1>Claims</span>.(jwt.<span class=pl-smi>MapClaims</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"></td>\n        <td id=\"file-cognito_mock-go-LC99\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;iat&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>time</span>.<span class=pl-en>Now</span>().<span class=pl-en>Unix</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"></td>\n        <td id=\"file-cognito_mock-go-LC100\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;exp&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>time</span>.<span class=pl-en>Now</span>().<span class=pl-en>Add</span>(<span class=pl-s1>time</span>.<span class=pl-c1>Hour</span> <span class=pl-c1>*</span> <span class=pl-c1>24</span> <span class=pl-c1>*</span> <span class=pl-c1>365</span> <span class=pl-c1>*</span> <span class=pl-c1>10</span>).<span class=pl-en>Unix</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"></td>\n        <td id=\"file-cognito_mock-go-LC101\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;sub&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>u</span>.<span class=pl-c1>UUID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"></td>\n        <td id=\"file-cognito_mock-go-LC102\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>claims</span>[<span class=pl-s>&quot;email&quot;</span>] <span class=pl-c1>=</span> <span class=pl-s1>u</span>.<span class=pl-c1>Email</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L103\" class=\"blob-num js-line-number\" data-line-number=\"103\"></td>\n        <td id=\"file-cognito_mock-go-LC103\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>token</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L104\" class=\"blob-num js-line-number\" data-line-number=\"104\"></td>\n        <td id=\"file-cognito_mock-go-LC104\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L105\" class=\"blob-num js-line-number\" data-line-number=\"105\"></td>\n        <td id=\"file-cognito_mock-go-LC105\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L106\" class=\"blob-num js-line-number\" data-line-number=\"106\"></td>\n        <td id=\"file-cognito_mock-go-LC106\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>ClientID</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L107\" class=\"blob-num js-line-number\" data-line-number=\"107\"></td>\n        <td id=\"file-cognito_mock-go-LC107\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L108\" class=\"blob-num js-line-number\" data-line-number=\"108\"></td>\n        <td id=\"file-cognito_mock-go-LC108\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>Username</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L109\" class=\"blob-num js-line-number\" data-line-number=\"109\"></td>\n        <td id=\"file-cognito_mock-go-LC109\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L110\" class=\"blob-num js-line-number\" data-line-number=\"110\"></td>\n        <td id=\"file-cognito_mock-go-LC110\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserMap</span> <span class=pl-k>map</span>[<span class=pl-smi>Username</span>]<span class=pl-c1>*</span><span class=pl-smi>User</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L111\" class=\"blob-num js-line-number\" data-line-number=\"111\"></td>\n        <td id=\"file-cognito_mock-go-LC111\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L112\" class=\"blob-num js-line-number\" data-line-number=\"112\"></td>\n        <td id=\"file-cognito_mock-go-LC112\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserPoolID</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L113\" class=\"blob-num js-line-number\" data-line-number=\"113\"></td>\n        <td id=\"file-cognito_mock-go-LC113\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L114\" class=\"blob-num js-line-number\" data-line-number=\"114\"></td>\n        <td id=\"file-cognito_mock-go-LC114\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>UserPool</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L115\" class=\"blob-num js-line-number\" data-line-number=\"115\"></td>\n        <td id=\"file-cognito_mock-go-LC115\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>poolMap</span> <span class=pl-k>map</span>[<span class=pl-smi>UserPoolID</span>]<span class=pl-smi>UserMap</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L116\" class=\"blob-num js-line-number\" data-line-number=\"116\"></td>\n        <td id=\"file-cognito_mock-go-LC116\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>mutex</span>   <span class=pl-c1>*</span>sync.<span class=pl-smi>Mutex</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L117\" class=\"blob-num js-line-number\" data-line-number=\"117\"></td>\n        <td id=\"file-cognito_mock-go-LC117\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L118\" class=\"blob-num js-line-number\" data-line-number=\"118\"></td>\n        <td id=\"file-cognito_mock-go-LC118\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L119\" class=\"blob-num js-line-number\" data-line-number=\"119\"></td>\n        <td id=\"file-cognito_mock-go-LC119\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>GetUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) (<span class=pl-c1>*</span><span class=pl-smi>User</span>, <span class=pl-smi>bool</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L120\" class=\"blob-num js-line-number\" data-line-number=\"120\"></td>\n        <td id=\"file-cognito_mock-go-LC120\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L121\" class=\"blob-num js-line-number\" data-line-number=\"121\"></td>\n        <td id=\"file-cognito_mock-go-LC121\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L122\" class=\"blob-num js-line-number\" data-line-number=\"122\"></td>\n        <td id=\"file-cognito_mock-go-LC122\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L123\" class=\"blob-num js-line-number\" data-line-number=\"123\"></td>\n        <td id=\"file-cognito_mock-go-LC123\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L124\" class=\"blob-num js-line-number\" data-line-number=\"124\"></td>\n        <td id=\"file-cognito_mock-go-LC124\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L125\" class=\"blob-num js-line-number\" data-line-number=\"125\"></td>\n        <td id=\"file-cognito_mock-go-LC125\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) (<span class=pl-c1>*</span><span class=pl-smi>User</span>, <span class=pl-smi>bool</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L126\" class=\"blob-num js-line-number\" data-line-number=\"126\"></td>\n        <td id=\"file-cognito_mock-go-LC126\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L127\" class=\"blob-num js-line-number\" data-line-number=\"127\"></td>\n        <td id=\"file-cognito_mock-go-LC127\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L128\" class=\"blob-num js-line-number\" data-line-number=\"128\"></td>\n        <td id=\"file-cognito_mock-go-LC128\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-c1>false</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L129\" class=\"blob-num js-line-number\" data-line-number=\"129\"></td>\n        <td id=\"file-cognito_mock-go-LC129\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L130\" class=\"blob-num js-line-number\" data-line-number=\"130\"></td>\n        <td id=\"file-cognito_mock-go-LC130\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>uMap</span>[<span class=pl-s1>username</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L131\" class=\"blob-num js-line-number\" data-line-number=\"131\"></td>\n        <td id=\"file-cognito_mock-go-LC131\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L132\" class=\"blob-num js-line-number\" data-line-number=\"132\"></td>\n        <td id=\"file-cognito_mock-go-LC132\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-c1>false</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L133\" class=\"blob-num js-line-number\" data-line-number=\"133\"></td>\n        <td id=\"file-cognito_mock-go-LC133\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L134\" class=\"blob-num js-line-number\" data-line-number=\"134\"></td>\n        <td id=\"file-cognito_mock-go-LC134\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>u</span>, <span class=pl-c1>true</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L135\" class=\"blob-num js-line-number\" data-line-number=\"135\"></td>\n        <td id=\"file-cognito_mock-go-LC135\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L136\" class=\"blob-num js-line-number\" data-line-number=\"136\"></td>\n        <td id=\"file-cognito_mock-go-LC136\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L137\" class=\"blob-num js-line-number\" data-line-number=\"137\"></td>\n        <td id=\"file-cognito_mock-go-LC137\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>CreateUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>user</span> <span class=pl-smi>User</span>) <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L138\" class=\"blob-num js-line-number\" data-line-number=\"138\"></td>\n        <td id=\"file-cognito_mock-go-LC138\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L139\" class=\"blob-num js-line-number\" data-line-number=\"139\"></td>\n        <td id=\"file-cognito_mock-go-LC139\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L140\" class=\"blob-num js-line-number\" data-line-number=\"140\"></td>\n        <td id=\"file-cognito_mock-go-LC140\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L141\" class=\"blob-num js-line-number\" data-line-number=\"141\"></td>\n        <td id=\"file-cognito_mock-go-LC141\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>]</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L142\" class=\"blob-num js-line-number\" data-line-number=\"142\"></td>\n        <td id=\"file-cognito_mock-go-LC142\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L143\" class=\"blob-num js-line-number\" data-line-number=\"143\"></td>\n        <td id=\"file-cognito_mock-go-LC143\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>uMap</span> <span class=pl-c1>=</span> <span class=pl-en>make</span>(<span class=pl-smi>UserMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L144\" class=\"blob-num js-line-number\" data-line-number=\"144\"></td>\n        <td id=\"file-cognito_mock-go-LC144\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>] <span class=pl-c1>=</span> <span class=pl-s1>uMap</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L145\" class=\"blob-num js-line-number\" data-line-number=\"145\"></td>\n        <td id=\"file-cognito_mock-go-LC145\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L146\" class=\"blob-num js-line-number\" data-line-number=\"146\"></td>\n        <td id=\"file-cognito_mock-go-LC146\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>uMap</span>[<span class=pl-s1>user</span>.<span class=pl-c1>Username</span>]; <span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L147\" class=\"blob-num js-line-number\" data-line-number=\"147\"></td>\n        <td id=\"file-cognito_mock-go-LC147\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;already exist&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L148\" class=\"blob-num js-line-number\" data-line-number=\"148\"></td>\n        <td id=\"file-cognito_mock-go-LC148\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L149\" class=\"blob-num js-line-number\" data-line-number=\"149\"></td>\n        <td id=\"file-cognito_mock-go-LC149\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>uMap</span>[<span class=pl-s1>user</span>.<span class=pl-c1>Username</span>] <span class=pl-c1>=</span> <span class=pl-c1>&amp;</span><span class=pl-s1>user</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L150\" class=\"blob-num js-line-number\" data-line-number=\"150\"></td>\n        <td id=\"file-cognito_mock-go-LC150\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>updateFile</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L151\" class=\"blob-num js-line-number\" data-line-number=\"151\"></td>\n        <td id=\"file-cognito_mock-go-LC151\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L152\" class=\"blob-num js-line-number\" data-line-number=\"152\"></td>\n        <td id=\"file-cognito_mock-go-LC152\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L153\" class=\"blob-num js-line-number\" data-line-number=\"153\"></td>\n        <td id=\"file-cognito_mock-go-LC153\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>updateFile</span>() <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L154\" class=\"blob-num js-line-number\" data-line-number=\"154\"></td>\n        <td id=\"file-cognito_mock-go-LC154\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>file</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>os</span>.<span class=pl-en>Create</span>(<span class=pl-s1>poolFileName</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L155\" class=\"blob-num js-line-number\" data-line-number=\"155\"></td>\n        <td id=\"file-cognito_mock-go-LC155\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L156\" class=\"blob-num js-line-number\" data-line-number=\"156\"></td>\n        <td id=\"file-cognito_mock-go-LC156\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L157\" class=\"blob-num js-line-number\" data-line-number=\"157\"></td>\n        <td id=\"file-cognito_mock-go-LC157\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L158\" class=\"blob-num js-line-number\" data-line-number=\"158\"></td>\n        <td id=\"file-cognito_mock-go-LC158\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>file</span>.<span class=pl-en>Close</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L159\" class=\"blob-num js-line-number\" data-line-number=\"159\"></td>\n        <td id=\"file-cognito_mock-go-LC159\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>content</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L160\" class=\"blob-num js-line-number\" data-line-number=\"160\"></td>\n        <td id=\"file-cognito_mock-go-LC160\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L161\" class=\"blob-num js-line-number\" data-line-number=\"161\"></td>\n        <td id=\"file-cognito_mock-go-LC161\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L162\" class=\"blob-num js-line-number\" data-line-number=\"162\"></td>\n        <td id=\"file-cognito_mock-go-LC162\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L163\" class=\"blob-num js-line-number\" data-line-number=\"163\"></td>\n        <td id=\"file-cognito_mock-go-LC163\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>_</span>, <span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>file</span>.<span class=pl-en>Write</span>(<span class=pl-s1>content</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L164\" class=\"blob-num js-line-number\" data-line-number=\"164\"></td>\n        <td id=\"file-cognito_mock-go-LC164\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L165\" class=\"blob-num js-line-number\" data-line-number=\"165\"></td>\n        <td id=\"file-cognito_mock-go-LC165\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L166\" class=\"blob-num js-line-number\" data-line-number=\"166\"></td>\n        <td id=\"file-cognito_mock-go-LC166\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L167\" class=\"blob-num js-line-number\" data-line-number=\"167\"></td>\n        <td id=\"file-cognito_mock-go-LC167\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> (<span class=pl-s1>pool</span> <span class=pl-smi>UserPool</span>) <span class=pl-en>DeleteUser</span>(<span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span>, <span class=pl-s1>username</span> <span class=pl-smi>Username</span>) <span class=pl-smi>error</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L168\" class=\"blob-num js-line-number\" data-line-number=\"168\"></td>\n        <td id=\"file-cognito_mock-go-LC168\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Lock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L169\" class=\"blob-num js-line-number\" data-line-number=\"169\"></td>\n        <td id=\"file-cognito_mock-go-LC169\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>defer</span> <span class=pl-s1>pool</span>.<span class=pl-c1>mutex</span>.<span class=pl-en>Unlock</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L170\" class=\"blob-num js-line-number\" data-line-number=\"170\"></td>\n        <td id=\"file-cognito_mock-go-LC170\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L171\" class=\"blob-num js-line-number\" data-line-number=\"171\"></td>\n        <td id=\"file-cognito_mock-go-LC171\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>exist</span> <span class=pl-c1>:=</span> <span class=pl-s1>pool</span>.<span class=pl-en>getUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>); <span class=pl-s1>exist</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L172\" class=\"blob-num js-line-number\" data-line-number=\"172\"></td>\n        <td id=\"file-cognito_mock-go-LC172\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-en>delete</span>(<span class=pl-s1>pool</span>.<span class=pl-c1>poolMap</span>[<span class=pl-s1>userPoolID</span>], <span class=pl-s1>username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L173\" class=\"blob-num js-line-number\" data-line-number=\"173\"></td>\n        <td id=\"file-cognito_mock-go-LC173\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L174\" class=\"blob-num js-line-number\" data-line-number=\"174\"></td>\n        <td id=\"file-cognito_mock-go-LC174\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>pool</span>.<span class=pl-en>updateFile</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L175\" class=\"blob-num js-line-number\" data-line-number=\"175\"></td>\n        <td id=\"file-cognito_mock-go-LC175\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L176\" class=\"blob-num js-line-number\" data-line-number=\"176\"></td>\n        <td id=\"file-cognito_mock-go-LC176\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L177\" class=\"blob-num js-line-number\" data-line-number=\"177\"></td>\n        <td id=\"file-cognito_mock-go-LC177\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>type</span> <span class=pl-smi>jwkKey</span> <span class=pl-k>struct</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L178\" class=\"blob-num js-line-number\" data-line-number=\"178\"></td>\n        <td id=\"file-cognito_mock-go-LC178\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Alg</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;alg&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L179\" class=\"blob-num js-line-number\" data-line-number=\"179\"></td>\n        <td id=\"file-cognito_mock-go-LC179\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>E</span>   <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;e&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L180\" class=\"blob-num js-line-number\" data-line-number=\"180\"></td>\n        <td id=\"file-cognito_mock-go-LC180\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Kid</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;kid&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L181\" class=\"blob-num js-line-number\" data-line-number=\"181\"></td>\n        <td id=\"file-cognito_mock-go-LC181\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Kty</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;kty&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L182\" class=\"blob-num js-line-number\" data-line-number=\"182\"></td>\n        <td id=\"file-cognito_mock-go-LC182\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>N</span>   <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;n&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L183\" class=\"blob-num js-line-number\" data-line-number=\"183\"></td>\n        <td id=\"file-cognito_mock-go-LC183\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c1>Use</span> <span class=pl-smi>string</span> <span class=pl-s>`json:&quot;use&quot;`</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L184\" class=\"blob-num js-line-number\" data-line-number=\"184\"></td>\n        <td id=\"file-cognito_mock-go-LC184\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L185\" class=\"blob-num js-line-number\" data-line-number=\"185\"></td>\n        <td id=\"file-cognito_mock-go-LC185\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L186\" class=\"blob-num js-line-number\" data-line-number=\"186\"></td>\n        <td id=\"file-cognito_mock-go-LC186\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>getPublicKey</span>() (<span class=pl-smi>string</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L187\" class=\"blob-num js-line-number\" data-line-number=\"187\"></td>\n        <td id=\"file-cognito_mock-go-LC187\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>verifyBytes</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s>&quot;./key.pem.pub.pkcs8&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L188\" class=\"blob-num js-line-number\" data-line-number=\"188\"></td>\n        <td id=\"file-cognito_mock-go-LC188\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L189\" class=\"blob-num js-line-number\" data-line-number=\"189\"></td>\n        <td id=\"file-cognito_mock-go-LC189\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L190\" class=\"blob-num js-line-number\" data-line-number=\"190\"></td>\n        <td id=\"file-cognito_mock-go-LC190\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L191\" class=\"blob-num js-line-number\" data-line-number=\"191\"></td>\n        <td id=\"file-cognito_mock-go-LC191\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>verifyKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>jwt</span>.<span class=pl-en>ParseRSAPublicKeyFromPEM</span>(<span class=pl-s1>verifyBytes</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L192\" class=\"blob-num js-line-number\" data-line-number=\"192\"></td>\n        <td id=\"file-cognito_mock-go-LC192\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L193\" class=\"blob-num js-line-number\" data-line-number=\"193\"></td>\n        <td id=\"file-cognito_mock-go-LC193\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L194\" class=\"blob-num js-line-number\" data-line-number=\"194\"></td>\n        <td id=\"file-cognito_mock-go-LC194\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L195\" class=\"blob-num js-line-number\" data-line-number=\"195\"></td>\n        <td id=\"file-cognito_mock-go-LC195\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L196\" class=\"blob-num js-line-number\" data-line-number=\"196\"></td>\n        <td id=\"file-cognito_mock-go-LC196\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>encodedN</span> <span class=pl-c1>:=</span> <span class=pl-s1>base64</span>.<span class=pl-c1>RawURLEncoding</span>.<span class=pl-en>EncodeToString</span>(<span class=pl-s1>verifyKey</span>.<span class=pl-c1>N</span>.<span class=pl-en>Bytes</span>())</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L197\" class=\"blob-num js-line-number\" data-line-number=\"197\"></td>\n        <td id=\"file-cognito_mock-go-LC197\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L198\" class=\"blob-num js-line-number\" data-line-number=\"198\"></td>\n        <td id=\"file-cognito_mock-go-LC198\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>bytesE</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>([]<span class=pl-smi>byte</span>, <span class=pl-c1>4</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L199\" class=\"blob-num js-line-number\" data-line-number=\"199\"></td>\n        <td id=\"file-cognito_mock-go-LC199\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>binary</span>.<span class=pl-c1>BigEndian</span>.<span class=pl-en>PutUint32</span>(<span class=pl-s1>bytesE</span>, <span class=pl-en>uint32</span>(<span class=pl-s1>verifyKey</span>.<span class=pl-c1>E</span>))</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L200\" class=\"blob-num js-line-number\" data-line-number=\"200\"></td>\n        <td id=\"file-cognito_mock-go-LC200\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L201\" class=\"blob-num js-line-number\" data-line-number=\"201\"></td>\n        <td id=\"file-cognito_mock-go-LC201\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>encodedE</span> <span class=pl-c1>:=</span> <span class=pl-s1>base64</span>.<span class=pl-c1>RawURLEncoding</span>.<span class=pl-en>EncodeToString</span>(<span class=pl-s1>bytesE</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L202\" class=\"blob-num js-line-number\" data-line-number=\"202\"></td>\n        <td id=\"file-cognito_mock-go-LC202\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L203\" class=\"blob-num js-line-number\" data-line-number=\"203\"></td>\n        <td id=\"file-cognito_mock-go-LC203\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pubKey</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(<span class=pl-smi>jwkKey</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L204\" class=\"blob-num js-line-number\" data-line-number=\"204\"></td>\n        <td id=\"file-cognito_mock-go-LC204\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Alg</span>: <span class=pl-s1>jwt</span>.<span class=pl-c1>SigningMethodRS256</span>.<span class=pl-en>Alg</span>(),</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L205\" class=\"blob-num js-line-number\" data-line-number=\"205\"></td>\n        <td id=\"file-cognito_mock-go-LC205\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>E</span>:   <span class=pl-s1>encodedE</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L206\" class=\"blob-num js-line-number\" data-line-number=\"206\"></td>\n        <td id=\"file-cognito_mock-go-LC206\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Kid</span>: <span class=pl-s1>jwkKeyID</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L207\" class=\"blob-num js-line-number\" data-line-number=\"207\"></td>\n        <td id=\"file-cognito_mock-go-LC207\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Kty</span>: <span class=pl-s>&quot;RSA&quot;</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L208\" class=\"blob-num js-line-number\" data-line-number=\"208\"></td>\n        <td id=\"file-cognito_mock-go-LC208\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>N</span>:   <span class=pl-s1>encodedN</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L209\" class=\"blob-num js-line-number\" data-line-number=\"209\"></td>\n        <td id=\"file-cognito_mock-go-LC209\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Use</span>: <span class=pl-s>&quot;sig&quot;</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L210\" class=\"blob-num js-line-number\" data-line-number=\"210\"></td>\n        <td id=\"file-cognito_mock-go-LC210\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L211\" class=\"blob-num js-line-number\" data-line-number=\"211\"></td>\n        <td id=\"file-cognito_mock-go-LC211\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L212\" class=\"blob-num js-line-number\" data-line-number=\"212\"></td>\n        <td id=\"file-cognito_mock-go-LC212\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L213\" class=\"blob-num js-line-number\" data-line-number=\"213\"></td>\n        <td id=\"file-cognito_mock-go-LC213\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L214\" class=\"blob-num js-line-number\" data-line-number=\"214\"></td>\n        <td id=\"file-cognito_mock-go-LC214\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-en>string</span>(<span class=pl-s1>pubKey</span>), <span class=pl-c1>nil</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L215\" class=\"blob-num js-line-number\" data-line-number=\"215\"></td>\n        <td id=\"file-cognito_mock-go-LC215\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L216\" class=\"blob-num js-line-number\" data-line-number=\"216\"></td>\n        <td id=\"file-cognito_mock-go-LC216\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L217\" class=\"blob-num js-line-number\" data-line-number=\"217\"></td>\n        <td id=\"file-cognito_mock-go-LC217\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>getPrivateKey</span>() (<span class=pl-c1>*</span>rsa.<span class=pl-smi>PrivateKey</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L218\" class=\"blob-num js-line-number\" data-line-number=\"218\"></td>\n        <td id=\"file-cognito_mock-go-LC218\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>signBytes</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>ioutil</span>.<span class=pl-en>ReadFile</span>(<span class=pl-s>&quot;./key.pem&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L219\" class=\"blob-num js-line-number\" data-line-number=\"219\"></td>\n        <td id=\"file-cognito_mock-go-LC219\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L220\" class=\"blob-num js-line-number\" data-line-number=\"220\"></td>\n        <td id=\"file-cognito_mock-go-LC220\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L221\" class=\"blob-num js-line-number\" data-line-number=\"221\"></td>\n        <td id=\"file-cognito_mock-go-LC221\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L222\" class=\"blob-num js-line-number\" data-line-number=\"222\"></td>\n        <td id=\"file-cognito_mock-go-LC222\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>jwt</span>.<span class=pl-en>ParseRSAPrivateKeyFromPEM</span>(<span class=pl-s1>signBytes</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L223\" class=\"blob-num js-line-number\" data-line-number=\"223\"></td>\n        <td id=\"file-cognito_mock-go-LC223\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L224\" class=\"blob-num js-line-number\" data-line-number=\"224\"></td>\n        <td id=\"file-cognito_mock-go-LC224\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L225\" class=\"blob-num js-line-number\" data-line-number=\"225\"></td>\n        <td id=\"file-cognito_mock-go-LC225\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>route</span>(<span class=pl-s1>xAmzTarget</span> <span class=pl-smi>string</span>, <span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L226\" class=\"blob-num js-line-number\" data-line-number=\"226\"></td>\n        <td id=\"file-cognito_mock-go-LC226\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>log</span>.<span class=pl-en>Println</span>(<span class=pl-s1>xAmzTarget</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L227\" class=\"blob-num js-line-number\" data-line-number=\"227\"></td>\n        <td id=\"file-cognito_mock-go-LC227\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>targets</span> <span class=pl-c1>:=</span> <span class=pl-s1>strings</span>.<span class=pl-en>Split</span>(<span class=pl-s1>xAmzTarget</span>, <span class=pl-s>&quot;.&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L228\" class=\"blob-num js-line-number\" data-line-number=\"228\"></td>\n        <td id=\"file-cognito_mock-go-LC228\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-en>len</span>(<span class=pl-s1>targets</span>) <span class=pl-c1>&lt;</span> <span class=pl-c1>2</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L229\" class=\"blob-num js-line-number\" data-line-number=\"229\"></td>\n        <td id=\"file-cognito_mock-go-LC229\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid header&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L230\" class=\"blob-num js-line-number\" data-line-number=\"230\"></td>\n        <td id=\"file-cognito_mock-go-LC230\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L231\" class=\"blob-num js-line-number\" data-line-number=\"231\"></td>\n        <td id=\"file-cognito_mock-go-LC231\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L232\" class=\"blob-num js-line-number\" data-line-number=\"232\"></td>\n        <td id=\"file-cognito_mock-go-LC232\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>switch</span> <span class=pl-s1>targets</span>[<span class=pl-c1>1</span>] {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L233\" class=\"blob-num js-line-number\" data-line-number=\"233\"></td>\n        <td id=\"file-cognito_mock-go-LC233\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>case</span> <span class=pl-s>&quot;AdminInitiateAuth&quot;</span>:</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L234\" class=\"blob-num js-line-number\" data-line-number=\"234\"></td>\n        <td id=\"file-cognito_mock-go-LC234\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-en>adminInitiateAuth</span>(<span class=pl-s1>body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L235\" class=\"blob-num js-line-number\" data-line-number=\"235\"></td>\n        <td id=\"file-cognito_mock-go-LC235\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>case</span> <span class=pl-s>&quot;AdminCreateUser&quot;</span>:</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L236\" class=\"blob-num js-line-number\" data-line-number=\"236\"></td>\n        <td id=\"file-cognito_mock-go-LC236\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-en>adminCreateUser</span>(<span class=pl-s1>body</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L237\" class=\"blob-num js-line-number\" data-line-number=\"237\"></td>\n        <td id=\"file-cognito_mock-go-LC237\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L238\" class=\"blob-num js-line-number\" data-line-number=\"238\"></td>\n        <td id=\"file-cognito_mock-go-LC238\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid operation name&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L239\" class=\"blob-num js-line-number\" data-line-number=\"239\"></td>\n        <td id=\"file-cognito_mock-go-LC239\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L240\" class=\"blob-num js-line-number\" data-line-number=\"240\"></td>\n        <td id=\"file-cognito_mock-go-LC240\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L241\" class=\"blob-num js-line-number\" data-line-number=\"241\"></td>\n        <td id=\"file-cognito_mock-go-LC241\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>adminInitiateAuth</span>(<span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L242\" class=\"blob-num js-line-number\" data-line-number=\"242\"></td>\n        <td id=\"file-cognito_mock-go-LC242\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>in</span> <span class=pl-c1>:=</span> cognitoidentityprovider.<span class=pl-smi>AdminInitiateAuthInput</span>{}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L243\" class=\"blob-num js-line-number\" data-line-number=\"243\"></td>\n        <td id=\"file-cognito_mock-go-LC243\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>body</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>in</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L244\" class=\"blob-num js-line-number\" data-line-number=\"244\"></td>\n        <td id=\"file-cognito_mock-go-LC244\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L245\" class=\"blob-num js-line-number\" data-line-number=\"245\"></td>\n        <td id=\"file-cognito_mock-go-LC245\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L246\" class=\"blob-num js-line-number\" data-line-number=\"246\"></td>\n        <td id=\"file-cognito_mock-go-LC246\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L247\" class=\"blob-num js-line-number\" data-line-number=\"247\"></td>\n        <td id=\"file-cognito_mock-go-LC247\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// TODO: まだ ADMIN_NO_SRP_AUTH だけ</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L248\" class=\"blob-num js-line-number\" data-line-number=\"248\"></td>\n        <td id=\"file-cognito_mock-go-LC248\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthFlow</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>AuthFlow</span> <span class=pl-c1>!=</span> <span class=pl-s1>cognitoidentityprovider</span>.<span class=pl-c1>AuthFlowTypeAdminNoSrpAuth</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L249\" class=\"blob-num js-line-number\" data-line-number=\"249\"></td>\n        <td id=\"file-cognito_mock-go-LC249\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid auth flow&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L250\" class=\"blob-num js-line-number\" data-line-number=\"250\"></td>\n        <td id=\"file-cognito_mock-go-LC250\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L251\" class=\"blob-num js-line-number\" data-line-number=\"251\"></td>\n        <td id=\"file-cognito_mock-go-LC251\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L252\" class=\"blob-num js-line-number\" data-line-number=\"252\"></td>\n        <td id=\"file-cognito_mock-go-LC252\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>cID</span> <span class=pl-smi>ClientID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L253\" class=\"blob-num js-line-number\" data-line-number=\"253\"></td>\n        <td id=\"file-cognito_mock-go-LC253\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>ClientId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L254\" class=\"blob-num js-line-number\" data-line-number=\"254\"></td>\n        <td id=\"file-cognito_mock-go-LC254\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>cID</span> <span class=pl-c1>=</span> <span class=pl-en>ClientID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>ClientId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L255\" class=\"blob-num js-line-number\" data-line-number=\"255\"></td>\n        <td id=\"file-cognito_mock-go-LC255\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L256\" class=\"blob-num js-line-number\" data-line-number=\"256\"></td>\n        <td id=\"file-cognito_mock-go-LC256\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>cID</span> <span class=pl-c1>!=</span> <span class=pl-s1>clientID</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L257\" class=\"blob-num js-line-number\" data-line-number=\"257\"></td>\n        <td id=\"file-cognito_mock-go-LC257\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid client id&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L258\" class=\"blob-num js-line-number\" data-line-number=\"258\"></td>\n        <td id=\"file-cognito_mock-go-LC258\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L259\" class=\"blob-num js-line-number\" data-line-number=\"259\"></td>\n        <td id=\"file-cognito_mock-go-LC259\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L260\" class=\"blob-num js-line-number\" data-line-number=\"260\"></td>\n        <td id=\"file-cognito_mock-go-LC260\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L261\" class=\"blob-num js-line-number\" data-line-number=\"261\"></td>\n        <td id=\"file-cognito_mock-go-LC261\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L262\" class=\"blob-num js-line-number\" data-line-number=\"262\"></td>\n        <td id=\"file-cognito_mock-go-LC262\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span> <span class=pl-c1>=</span> <span class=pl-en>UserPoolID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L263\" class=\"blob-num js-line-number\" data-line-number=\"263\"></td>\n        <td id=\"file-cognito_mock-go-LC263\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L264\" class=\"blob-num js-line-number\" data-line-number=\"264\"></td>\n        <td id=\"file-cognito_mock-go-LC264\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>username</span> <span class=pl-smi>Username</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L265\" class=\"blob-num js-line-number\" data-line-number=\"265\"></td>\n        <td id=\"file-cognito_mock-go-LC265\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthParameters</span>[<span class=pl-s>&quot;USERNAME&quot;</span>]; <span class=pl-s1>ok</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-s1>u</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L266\" class=\"blob-num js-line-number\" data-line-number=\"266\"></td>\n        <td id=\"file-cognito_mock-go-LC266\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span> <span class=pl-c1>=</span> <span class=pl-en>Username</span>(<span class=pl-c1>*</span><span class=pl-s1>u</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L267\" class=\"blob-num js-line-number\" data-line-number=\"267\"></td>\n        <td id=\"file-cognito_mock-go-LC267\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L268\" class=\"blob-num js-line-number\" data-line-number=\"268\"></td>\n        <td id=\"file-cognito_mock-go-LC268\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>u</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>GetUser</span>(</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L269\" class=\"blob-num js-line-number\" data-line-number=\"269\"></td>\n        <td id=\"file-cognito_mock-go-LC269\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L270\" class=\"blob-num js-line-number\" data-line-number=\"270\"></td>\n        <td id=\"file-cognito_mock-go-LC270\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L271\" class=\"blob-num js-line-number\" data-line-number=\"271\"></td>\n        <td id=\"file-cognito_mock-go-LC271\" class=\"blob-code blob-code-inner js-file-line\">\t)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L272\" class=\"blob-num js-line-number\" data-line-number=\"272\"></td>\n        <td id=\"file-cognito_mock-go-LC272\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>ok</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L273\" class=\"blob-num js-line-number\" data-line-number=\"273\"></td>\n        <td id=\"file-cognito_mock-go-LC273\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;user not found&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L274\" class=\"blob-num js-line-number\" data-line-number=\"274\"></td>\n        <td id=\"file-cognito_mock-go-LC274\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L275\" class=\"blob-num js-line-number\" data-line-number=\"275\"></td>\n        <td id=\"file-cognito_mock-go-LC275\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-c1>!</span><span class=pl-s1>u</span>.<span class=pl-c1>EmailVerified</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L276\" class=\"blob-num js-line-number\" data-line-number=\"276\"></td>\n        <td id=\"file-cognito_mock-go-LC276\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;email not verified&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L277\" class=\"blob-num js-line-number\" data-line-number=\"277\"></td>\n        <td id=\"file-cognito_mock-go-LC277\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L278\" class=\"blob-num js-line-number\" data-line-number=\"278\"></td>\n        <td id=\"file-cognito_mock-go-LC278\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L279\" class=\"blob-num js-line-number\" data-line-number=\"279\"></td>\n        <td id=\"file-cognito_mock-go-LC279\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>password</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L280\" class=\"blob-num js-line-number\" data-line-number=\"280\"></td>\n        <td id=\"file-cognito_mock-go-LC280\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>p</span>, <span class=pl-s1>ok</span> <span class=pl-c1>:=</span> <span class=pl-s1>in</span>.<span class=pl-c1>AuthParameters</span>[<span class=pl-s>&quot;PASSWORD&quot;</span>]; <span class=pl-s1>ok</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-s1>p</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L281\" class=\"blob-num js-line-number\" data-line-number=\"281\"></td>\n        <td id=\"file-cognito_mock-go-LC281\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>password</span> <span class=pl-c1>=</span> <span class=pl-c1>*</span><span class=pl-s1>p</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L282\" class=\"blob-num js-line-number\" data-line-number=\"282\"></td>\n        <td id=\"file-cognito_mock-go-LC282\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L283\" class=\"blob-num js-line-number\" data-line-number=\"283\"></td>\n        <td id=\"file-cognito_mock-go-LC283\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>u</span>.<span class=pl-c1>Password</span> <span class=pl-c1>!=</span> <span class=pl-s1>password</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L284\" class=\"blob-num js-line-number\" data-line-number=\"284\"></td>\n        <td id=\"file-cognito_mock-go-LC284\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;password not match&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L285\" class=\"blob-num js-line-number\" data-line-number=\"285\"></td>\n        <td id=\"file-cognito_mock-go-LC285\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L286\" class=\"blob-num js-line-number\" data-line-number=\"286\"></td>\n        <td id=\"file-cognito_mock-go-LC286\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L287\" class=\"blob-num js-line-number\" data-line-number=\"287\"></td>\n        <td id=\"file-cognito_mock-go-LC287\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>tokenString</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>u</span>.<span class=pl-en>ToToken</span>(<span class=pl-s1>userPoolID</span>).<span class=pl-en>SignedString</span>(<span class=pl-s1>signKey</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L288\" class=\"blob-num js-line-number\" data-line-number=\"288\"></td>\n        <td id=\"file-cognito_mock-go-LC288\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L289\" class=\"blob-num js-line-number\" data-line-number=\"289\"></td>\n        <td id=\"file-cognito_mock-go-LC289\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L290\" class=\"blob-num js-line-number\" data-line-number=\"290\"></td>\n        <td id=\"file-cognito_mock-go-LC290\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L291\" class=\"blob-num js-line-number\" data-line-number=\"291\"></td>\n        <td id=\"file-cognito_mock-go-LC291\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminInitiateAuthOutput</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L292\" class=\"blob-num js-line-number\" data-line-number=\"292\"></td>\n        <td id=\"file-cognito_mock-go-LC292\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>AuthenticationResult</span>: <span class=pl-c1>&amp;</span>cognitoidentityprovider.<span class=pl-smi>AuthenticationResultType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L293\" class=\"blob-num js-line-number\" data-line-number=\"293\"></td>\n        <td id=\"file-cognito_mock-go-LC293\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>AccessToken</span>: <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s1>tokenString</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L294\" class=\"blob-num js-line-number\" data-line-number=\"294\"></td>\n        <td id=\"file-cognito_mock-go-LC294\" class=\"blob-code blob-code-inner js-file-line\">\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L295\" class=\"blob-num js-line-number\" data-line-number=\"295\"></td>\n        <td id=\"file-cognito_mock-go-LC295\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L296\" class=\"blob-num js-line-number\" data-line-number=\"296\"></td>\n        <td id=\"file-cognito_mock-go-LC296\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L297\" class=\"blob-num js-line-number\" data-line-number=\"297\"></td>\n        <td id=\"file-cognito_mock-go-LC297\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L298\" class=\"blob-num js-line-number\" data-line-number=\"298\"></td>\n        <td id=\"file-cognito_mock-go-LC298\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>adminCreateUser</span>(<span class=pl-s1>body</span> []<span class=pl-smi>byte</span>) ([]<span class=pl-smi>byte</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L299\" class=\"blob-num js-line-number\" data-line-number=\"299\"></td>\n        <td id=\"file-cognito_mock-go-LC299\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>in</span> <span class=pl-c1>:=</span> cognitoidentityprovider.<span class=pl-smi>AdminCreateUserInput</span>{}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L300\" class=\"blob-num js-line-number\" data-line-number=\"300\"></td>\n        <td id=\"file-cognito_mock-go-LC300\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>json</span>.<span class=pl-en>Unmarshal</span>(<span class=pl-s1>body</span>, <span class=pl-c1>&amp;</span><span class=pl-s1>in</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L301\" class=\"blob-num js-line-number\" data-line-number=\"301\"></td>\n        <td id=\"file-cognito_mock-go-LC301\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L302\" class=\"blob-num js-line-number\" data-line-number=\"302\"></td>\n        <td id=\"file-cognito_mock-go-LC302\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L303\" class=\"blob-num js-line-number\" data-line-number=\"303\"></td>\n        <td id=\"file-cognito_mock-go-LC303\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L304\" class=\"blob-num js-line-number\" data-line-number=\"304\"></td>\n        <td id=\"file-cognito_mock-go-LC304\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L305\" class=\"blob-num js-line-number\" data-line-number=\"305\"></td>\n        <td id=\"file-cognito_mock-go-LC305\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>userPoolID</span> <span class=pl-smi>UserPoolID</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L306\" class=\"blob-num js-line-number\" data-line-number=\"306\"></td>\n        <td id=\"file-cognito_mock-go-LC306\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L307\" class=\"blob-num js-line-number\" data-line-number=\"307\"></td>\n        <td id=\"file-cognito_mock-go-LC307\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>userPoolID</span> <span class=pl-c1>=</span> <span class=pl-en>UserPoolID</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>UserPoolId</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L308\" class=\"blob-num js-line-number\" data-line-number=\"308\"></td>\n        <td id=\"file-cognito_mock-go-LC308\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L309\" class=\"blob-num js-line-number\" data-line-number=\"309\"></td>\n        <td id=\"file-cognito_mock-go-LC309\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>username</span> <span class=pl-smi>Username</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L310\" class=\"blob-num js-line-number\" data-line-number=\"310\"></td>\n        <td id=\"file-cognito_mock-go-LC310\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>Username</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L311\" class=\"blob-num js-line-number\" data-line-number=\"311\"></td>\n        <td id=\"file-cognito_mock-go-LC311\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>username</span> <span class=pl-c1>=</span> <span class=pl-en>Username</span>(<span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>Username</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L312\" class=\"blob-num js-line-number\" data-line-number=\"312\"></td>\n        <td id=\"file-cognito_mock-go-LC312\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L313\" class=\"blob-num js-line-number\" data-line-number=\"313\"></td>\n        <td id=\"file-cognito_mock-go-LC313\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L314\" class=\"blob-num js-line-number\" data-line-number=\"314\"></td>\n        <td id=\"file-cognito_mock-go-LC314\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>in</span>.<span class=pl-c1>MessageAction</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> <span class=pl-c1>&amp;&amp;</span> <span class=pl-c1>*</span><span class=pl-s1>in</span>.<span class=pl-c1>MessageAction</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;RESEND&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L315\" class=\"blob-num js-line-number\" data-line-number=\"315\"></td>\n        <td id=\"file-cognito_mock-go-LC315\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>exist</span> <span class=pl-c1>:=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>GetUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>username</span>); <span class=pl-c1>!</span><span class=pl-s1>exist</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L316\" class=\"blob-num js-line-number\" data-line-number=\"316\"></td>\n        <td id=\"file-cognito_mock-go-LC316\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;user not found&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L317\" class=\"blob-num js-line-number\" data-line-number=\"317\"></td>\n        <td id=\"file-cognito_mock-go-LC317\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L318\" class=\"blob-num js-line-number\" data-line-number=\"318\"></td>\n        <td id=\"file-cognito_mock-go-LC318\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c>// TODO: パスワード変更して通知メール再送信</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L319\" class=\"blob-num js-line-number\" data-line-number=\"319\"></td>\n        <td id=\"file-cognito_mock-go-LC319\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminCreateUserOutput</span>{})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L320\" class=\"blob-num js-line-number\" data-line-number=\"320\"></td>\n        <td id=\"file-cognito_mock-go-LC320\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L321\" class=\"blob-num js-line-number\" data-line-number=\"321\"></td>\n        <td id=\"file-cognito_mock-go-LC321\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L322\" class=\"blob-num js-line-number\" data-line-number=\"322\"></td>\n        <td id=\"file-cognito_mock-go-LC322\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>email</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L323\" class=\"blob-num js-line-number\" data-line-number=\"323\"></td>\n        <td id=\"file-cognito_mock-go-LC323\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>for</span> <span class=pl-s1>_</span>, <span class=pl-s1>attr</span> <span class=pl-c1>:=</span> <span class=pl-k>range</span> <span class=pl-s1>in</span>.<span class=pl-c1>UserAttributes</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L324\" class=\"blob-num js-line-number\" data-line-number=\"324\"></td>\n        <td id=\"file-cognito_mock-go-LC324\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-s1>attr</span>.<span class=pl-c1>Name</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> <span class=pl-c1>||</span> <span class=pl-s1>attr</span>.<span class=pl-c1>Value</span> <span class=pl-c1>==</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L325\" class=\"blob-num js-line-number\" data-line-number=\"325\"></td>\n        <td id=\"file-cognito_mock-go-LC325\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-k>continue</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L326\" class=\"blob-num js-line-number\" data-line-number=\"326\"></td>\n        <td id=\"file-cognito_mock-go-LC326\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L327\" class=\"blob-num js-line-number\" data-line-number=\"327\"></td>\n        <td id=\"file-cognito_mock-go-LC327\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>if</span> <span class=pl-c1>*</span><span class=pl-s1>attr</span>.<span class=pl-c1>Name</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;email&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L328\" class=\"blob-num js-line-number\" data-line-number=\"328\"></td>\n        <td id=\"file-cognito_mock-go-LC328\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-s1>email</span> <span class=pl-c1>=</span> <span class=pl-c1>*</span><span class=pl-s1>attr</span>.<span class=pl-c1>Value</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L329\" class=\"blob-num js-line-number\" data-line-number=\"329\"></td>\n        <td id=\"file-cognito_mock-go-LC329\" class=\"blob-code blob-code-inner js-file-line\">\t\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L330\" class=\"blob-num js-line-number\" data-line-number=\"330\"></td>\n        <td id=\"file-cognito_mock-go-LC330\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L331\" class=\"blob-num js-line-number\" data-line-number=\"331\"></td>\n        <td id=\"file-cognito_mock-go-LC331\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// TODO: email_verified が true ならパスワードメール送信, false なら検証メール送信</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L332\" class=\"blob-num js-line-number\" data-line-number=\"332\"></td>\n        <td id=\"file-cognito_mock-go-LC332\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-c>// 常にtrueとして扱っている</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L333\" class=\"blob-num js-line-number\" data-line-number=\"333\"></td>\n        <td id=\"file-cognito_mock-go-LC333\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>email</span> <span class=pl-c1>==</span> <span class=pl-s>&quot;&quot;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L334\" class=\"blob-num js-line-number\" data-line-number=\"334\"></td>\n        <td id=\"file-cognito_mock-go-LC334\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>fmt</span>.<span class=pl-en>Errorf</span>(<span class=pl-s>&quot;invalid email&quot;</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L335\" class=\"blob-num js-line-number\" data-line-number=\"335\"></td>\n        <td id=\"file-cognito_mock-go-LC335\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L336\" class=\"blob-num js-line-number\" data-line-number=\"336\"></td>\n        <td id=\"file-cognito_mock-go-LC336\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L337\" class=\"blob-num js-line-number\" data-line-number=\"337\"></td>\n        <td id=\"file-cognito_mock-go-LC337\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>id</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>uuid</span>.<span class=pl-en>NewV4</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L338\" class=\"blob-num js-line-number\" data-line-number=\"338\"></td>\n        <td id=\"file-cognito_mock-go-LC338\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L339\" class=\"blob-num js-line-number\" data-line-number=\"339\"></td>\n        <td id=\"file-cognito_mock-go-LC339\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L340\" class=\"blob-num js-line-number\" data-line-number=\"340\"></td>\n        <td id=\"file-cognito_mock-go-LC340\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L341\" class=\"blob-num js-line-number\" data-line-number=\"341\"></td>\n        <td id=\"file-cognito_mock-go-LC341\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>pass</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-en>makeRandomStr</span>(<span class=pl-c1>8</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L342\" class=\"blob-num js-line-number\" data-line-number=\"342\"></td>\n        <td id=\"file-cognito_mock-go-LC342\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L343\" class=\"blob-num js-line-number\" data-line-number=\"343\"></td>\n        <td id=\"file-cognito_mock-go-LC343\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L344\" class=\"blob-num js-line-number\" data-line-number=\"344\"></td>\n        <td id=\"file-cognito_mock-go-LC344\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L345\" class=\"blob-num js-line-number\" data-line-number=\"345\"></td>\n        <td id=\"file-cognito_mock-go-LC345\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>idString</span> <span class=pl-c1>:=</span> <span class=pl-s1>id</span>.<span class=pl-en>String</span>()</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L346\" class=\"blob-num js-line-number\" data-line-number=\"346\"></td>\n        <td id=\"file-cognito_mock-go-LC346\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>user</span> <span class=pl-c1>:=</span> <span class=pl-smi>User</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L347\" class=\"blob-num js-line-number\" data-line-number=\"347\"></td>\n        <td id=\"file-cognito_mock-go-LC347\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>UUID</span>:          <span class=pl-s1>idString</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L348\" class=\"blob-num js-line-number\" data-line-number=\"348\"></td>\n        <td id=\"file-cognito_mock-go-LC348\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Password</span>:      <span class=pl-s1>pass</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L349\" class=\"blob-num js-line-number\" data-line-number=\"349\"></td>\n        <td id=\"file-cognito_mock-go-LC349\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Username</span>:      <span class=pl-s1>username</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L350\" class=\"blob-num js-line-number\" data-line-number=\"350\"></td>\n        <td id=\"file-cognito_mock-go-LC350\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>Email</span>:         <span class=pl-s1>email</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L351\" class=\"blob-num js-line-number\" data-line-number=\"351\"></td>\n        <td id=\"file-cognito_mock-go-LC351\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>EmailVerified</span>: <span class=pl-c1>true</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L352\" class=\"blob-num js-line-number\" data-line-number=\"352\"></td>\n        <td id=\"file-cognito_mock-go-LC352\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L353\" class=\"blob-num js-line-number\" data-line-number=\"353\"></td>\n        <td id=\"file-cognito_mock-go-LC353\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>err</span> <span class=pl-c1>=</span> <span class=pl-s1>userPool</span>.<span class=pl-en>CreateUser</span>(<span class=pl-s1>userPoolID</span>, <span class=pl-s1>user</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L354\" class=\"blob-num js-line-number\" data-line-number=\"354\"></td>\n        <td id=\"file-cognito_mock-go-LC354\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L355\" class=\"blob-num js-line-number\" data-line-number=\"355\"></td>\n        <td id=\"file-cognito_mock-go-LC355\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-c1>nil</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L356\" class=\"blob-num js-line-number\" data-line-number=\"356\"></td>\n        <td id=\"file-cognito_mock-go-LC356\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L357\" class=\"blob-num js-line-number\" data-line-number=\"357\"></td>\n        <td id=\"file-cognito_mock-go-LC357\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L358\" class=\"blob-num js-line-number\" data-line-number=\"358\"></td>\n        <td id=\"file-cognito_mock-go-LC358\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>json</span>.<span class=pl-en>Marshal</span>(cognitoidentityprovider.<span class=pl-smi>AdminCreateUserOutput</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L359\" class=\"blob-num js-line-number\" data-line-number=\"359\"></td>\n        <td id=\"file-cognito_mock-go-LC359\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-c1>User</span>: <span class=pl-c1>&amp;</span>cognitoidentityprovider.<span class=pl-smi>UserType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L360\" class=\"blob-num js-line-number\" data-line-number=\"360\"></td>\n        <td id=\"file-cognito_mock-go-LC360\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t<span class=pl-c1>Attributes</span>: []<span class=pl-c1>*</span>cognitoidentityprovider.<span class=pl-smi>AttributeType</span>{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L361\" class=\"blob-num js-line-number\" data-line-number=\"361\"></td>\n        <td id=\"file-cognito_mock-go-LC361\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t{</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L362\" class=\"blob-num js-line-number\" data-line-number=\"362\"></td>\n        <td id=\"file-cognito_mock-go-LC362\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t\t<span class=pl-c1>Name</span>:  <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s>&quot;sub&quot;</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L363\" class=\"blob-num js-line-number\" data-line-number=\"363\"></td>\n        <td id=\"file-cognito_mock-go-LC363\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t\t<span class=pl-c1>Value</span>: <span class=pl-c1>&amp;</span>[]<span class=pl-smi>string</span>{<span class=pl-s1>idString</span>}[<span class=pl-c1>0</span>],</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L364\" class=\"blob-num js-line-number\" data-line-number=\"364\"></td>\n        <td id=\"file-cognito_mock-go-LC364\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L365\" class=\"blob-num js-line-number\" data-line-number=\"365\"></td>\n        <td id=\"file-cognito_mock-go-LC365\" class=\"blob-code blob-code-inner js-file-line\">\t\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L366\" class=\"blob-num js-line-number\" data-line-number=\"366\"></td>\n        <td id=\"file-cognito_mock-go-LC366\" class=\"blob-code blob-code-inner js-file-line\">\t\t},</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L367\" class=\"blob-num js-line-number\" data-line-number=\"367\"></td>\n        <td id=\"file-cognito_mock-go-LC367\" class=\"blob-code blob-code-inner js-file-line\">\t})</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L368\" class=\"blob-num js-line-number\" data-line-number=\"368\"></td>\n        <td id=\"file-cognito_mock-go-LC368\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L369\" class=\"blob-num js-line-number\" data-line-number=\"369\"></td>\n        <td id=\"file-cognito_mock-go-LC369\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L370\" class=\"blob-num js-line-number\" data-line-number=\"370\"></td>\n        <td id=\"file-cognito_mock-go-LC370\" class=\"blob-code blob-code-inner js-file-line\"><span class=pl-k>func</span> <span class=pl-en>makeRandomStr</span>(<span class=pl-s1>digit</span> <span class=pl-smi>uint32</span>) (<span class=pl-smi>string</span>, <span class=pl-smi>error</span>) {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L371\" class=\"blob-num js-line-number\" data-line-number=\"371\"></td>\n        <td id=\"file-cognito_mock-go-LC371\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>const</span> <span class=pl-s1>letters</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@&amp;%/:;,.&quot;</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L372\" class=\"blob-num js-line-number\" data-line-number=\"372\"></td>\n        <td id=\"file-cognito_mock-go-LC372\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L373\" class=\"blob-num js-line-number\" data-line-number=\"373\"></td>\n        <td id=\"file-cognito_mock-go-LC373\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-s1>b</span> <span class=pl-c1>:=</span> <span class=pl-en>make</span>([]<span class=pl-smi>byte</span>, <span class=pl-s1>digit</span>)</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L374\" class=\"blob-num js-line-number\" data-line-number=\"374\"></td>\n        <td id=\"file-cognito_mock-go-LC374\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>if</span> <span class=pl-s1>_</span>, <span class=pl-s1>err</span> <span class=pl-c1>:=</span> <span class=pl-s1>rand</span>.<span class=pl-en>Read</span>(<span class=pl-s1>b</span>); <span class=pl-s1>err</span> <span class=pl-c1>!=</span> <span class=pl-c1>nil</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L375\" class=\"blob-num js-line-number\" data-line-number=\"375\"></td>\n        <td id=\"file-cognito_mock-go-LC375\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-k>return</span> <span class=pl-s>&quot;&quot;</span>, <span class=pl-s1>err</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L376\" class=\"blob-num js-line-number\" data-line-number=\"376\"></td>\n        <td id=\"file-cognito_mock-go-LC376\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L377\" class=\"blob-num js-line-number\" data-line-number=\"377\"></td>\n        <td id=\"file-cognito_mock-go-LC377\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L378\" class=\"blob-num js-line-number\" data-line-number=\"378\"></td>\n        <td id=\"file-cognito_mock-go-LC378\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>var</span> <span class=pl-s1>result</span> <span class=pl-smi>string</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L379\" class=\"blob-num js-line-number\" data-line-number=\"379\"></td>\n        <td id=\"file-cognito_mock-go-LC379\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>for</span> <span class=pl-s1>_</span>, <span class=pl-s1>v</span> <span class=pl-c1>:=</span> <span class=pl-k>range</span> <span class=pl-s1>b</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L380\" class=\"blob-num js-line-number\" data-line-number=\"380\"></td>\n        <td id=\"file-cognito_mock-go-LC380\" class=\"blob-code blob-code-inner js-file-line\">\t\t<span class=pl-s1>result</span> <span class=pl-c1>+=</span> <span class=pl-en>string</span>(<span class=pl-s1>letters</span>[<span class=pl-en>int</span>(<span class=pl-s1>v</span>)<span class=pl-c1>%</span><span class=pl-en>len</span>(<span class=pl-s1>letters</span>)])</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L381\" class=\"blob-num js-line-number\" data-line-number=\"381\"></td>\n        <td id=\"file-cognito_mock-go-LC381\" class=\"blob-code blob-code-inner js-file-line\">\t}</td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L382\" class=\"blob-num js-line-number\" data-line-number=\"382\"></td>\n        <td id=\"file-cognito_mock-go-LC382\" class=\"blob-code blob-code-inner js-file-line\">\t<span class=pl-k>return</span> <span class=pl-s1>result</span>, <span class=pl-c1>nil</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-cognito_mock-go-L383\" class=\"blob-num js-line-number\" data-line-number=\"383\"></td>\n        <td id=\"file-cognito_mock-go-LC383\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/yutakahashi114/c2205e6feb06cad3bee470b665a0dd33/raw/a7c159f9563c64a9bcd7a07d7338bf6024cd371b/cognito_mock.go\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/yutakahashi114/c2205e6feb06cad3bee470b665a0dd33#file-cognito_mock-go\">cognito_mock.go</a>\n        hosted with &#10084; by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n\n<!--kg-card-end: html-->","url":"https://ghost.tech.anti-pattern.co.jp/amazon-cognito-emulator/","canonical_url":null,"uuid":"db4d5d2c-4ac8-4437-bb81-71a55b004cb7","page":null,"codeinjection_foot":null,"codeinjection_head":null,"codeinjection_styles":null,"comment_id":"61040dc93986b000013a4604","reading_time":14}}]}},"pageContext":{"slug":"amazon-cognito","pageNumber":0,"humanPageNumber":1,"skip":0,"limit":12,"numberOfPages":1,"previousPagePath":"","nextPagePath":""}},
    "staticQueryHashes": ["176528973","2358152166","2561578252","2731221146","4145280475"]}