{"action":"created","comment":{"url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/comments/92356480","pull_request_review_id":12866043,"id":92356480,"diff_hunk":"@@ -0,0 +1,236 @@\n+import { createHash } from 'crypto';\n+\n+import yaml from 'js-yaml';\n+import Memcached from 'memcached';\n+import parseGitHubUrl from 'parse-github-url';\n+\n+import { conf } from '../helpers/config';\n+import requestGitHub from '../helpers/github';\n+import getLaunchpad from '../launchpad';\n+import logging from '../logging';\n+\n+const logger = logging.getLogger('express-error');\n+\n+// XXX cjwatson 2016-12-08: Hardcoded for now, but should eventually be\n+// configurable.\n+const DISTRIBUTION = 'ubuntu';\n+const DISTRO_SERIES = 'xenial';\n+const STORE_SERIES = '16';\n+\n+const RESPONSE_GITHUB_BAD_URL = {\n+  status: 'error',\n+  payload: {\n+    code: 'github-bad-url',\n+    message: 'Cannot parse GitHub URL'\n+  }\n+};\n+\n+const RESPONSE_GITHUB_NOT_FOUND = {\n+  status: 'error',\n+  payload: {\n+    code: 'github-snapcraft-yaml-not-found',\n+    message: 'Cannot find snapcraft.yaml in this GitHub repository'\n+  }\n+};\n+\n+const RESPONSE_GITHUB_AUTHENTICATION_FAILED = {\n+  status: 'error',\n+  payload: {\n+    code: 'github-authentication-failed',\n+    message: 'Authentication with GitHub failed'\n+  }\n+};\n+\n+const RESPONSE_GITHUB_OTHER = {\n+  status: 'error',\n+  payload: {\n+    code: 'github-error-other',\n+    message: 'Something went wrong when looking for snapcraft.yaml'\n+  }\n+};\n+\n+const RESPONSE_SNAPCRAFT_YAML_PARSE_FAILED = {\n+  status: 'error',\n+  payload: {\n+    code: 'snapcraft-yaml-parse-failed',\n+    message: 'Failed to parse snapcraft.yaml'\n+  }\n+};\n+\n+const RESPONSE_SNAPCRAFT_YAML_NO_NAME = {\n+  status: 'error',\n+  payload: {\n+    code: 'snapcraft-yaml-no-name',\n+    message: 'snapcraft.yaml has no top-level \"name\" attribute'\n+  }\n+};\n+\n+const RESPONSE_SNAP_NOT_FOUND = {\n+  status: 'error',\n+  payload: {\n+    code: 'snap-not-found',\n+    message: 'Cannot find existing snap based on this URL'\n+  }\n+};\n+\n+let memcached = null;\n+\n+const getMemcached = () => {\n+  if (memcached === null) {\n+    memcached = new Memcached(conf.get('MEMCACHED_HOST').split(','),\n+                              { namespace: 'lp:' });\n+  }\n+  return memcached;\n+};\n+\n+// Test affordance.\n+export const setMemcached = (value) => {\n+  memcached = value;\n+};\n+\n+const makeSnapName = url => {\n+  return createHash('md5').update(url).digest('hex');\n+};\n+\n+const getSnapcraftYaml = (req, res, callback) => {\n+  const repositoryUrl = req.body.repository_url;\n+  const parsed = parseGitHubUrl(repositoryUrl);\n+  if (parsed === null || parsed.owner === null || parsed.name === null) {\n+    logger.info(`Cannot parse \"${repositoryUrl}\"`);\n+    return res.status(400).send(RESPONSE_GITHUB_BAD_URL);\n+  }\n+\n+  const uri = `/repos/${parsed.owner}/${parsed.name}/contents/snapcraft.yaml`;\n+  const options = {\n+    headers: {\n+      'Authorization': `token ${req.session.token}`,\n+      'Accept': 'application/vnd.github.v3.raw'\n+    }\n+  };\n+  logger.info(`Fetching snapcraft.yaml from ${repositoryUrl}`);\n+  return requestGitHub.get(uri, options, (err, response, body) => {\n+    if (response.statusCode !== 200) {\n+      try {\n+        body = JSON.parse(body);\n+      } catch (e) {\n+        logger.info('Invalid JSON received', err, body);\n+        return res.status(500).send(RESPONSE_GITHUB_OTHER);\n+      }\n+      switch (body.message) {\n+        case 'Not Found':\n+          // snapcraft.yaml not found\n+          return res.status(404).send(RESPONSE_GITHUB_NOT_FOUND);\n+        case 'Bad credentials':\n+          // Authentication failed\n+          return res.status(401).send(RESPONSE_GITHUB_AUTHENTICATION_FAILED);\n+        default:\n+          // Something else\n+          logger.info('GitHub API error:', err, body);\n+          return res.status(500).send(RESPONSE_GITHUB_OTHER);\n+      }\n+    }\n+\n+    let snapcraftYaml;\n+    try {\n+      snapcraftYaml = yaml.safeLoad(body);\n+    } catch (e) {\n+      return res.status(400).send(RESPONSE_SNAPCRAFT_YAML_PARSE_FAILED);\n+    }\n+    return callback(snapcraftYaml);\n+  });\n+};\n+\n+// XXX cjwatson 2016-12-13: We should set an appropriate set of\n+// architectures.\n+export const newSnap = (req, res) => {\n+  getSnapcraftYaml(req, res, snapcraftYaml => {","path":"src/server/handlers/launchpad.js","position":146,"original_position":146,"commit_id":"fa099818e95a3adc9ce3b6c11f368497112de01b","original_commit_id":"fa099818e95a3adc9ce3b6c11f368497112de01b","user":{"login":"bartaz","id":83575,"avatar_url":"https://avatars.githubusercontent.com/u/83575?v=3","gravatar_id":"","url":"https://api.github.com/users/bartaz","html_url":"https://github.com/bartaz","followers_url":"https://api.github.com/users/bartaz/followers","following_url":"https://api.github.com/users/bartaz/following{/other_user}","gists_url":"https://api.github.com/users/bartaz/gists{/gist_id}","starred_url":"https://api.github.com/users/bartaz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bartaz/subscriptions","organizations_url":"https://api.github.com/users/bartaz/orgs","repos_url":"https://api.github.com/users/bartaz/repos","events_url":"https://api.github.com/users/bartaz/events{/privacy}","received_events_url":"https://api.github.com/users/bartaz/received_events","type":"User","site_admin":false},"body":"It's not a huge deal (especially now in first phase), but we have a bit of duplication. We already call GH API for snapcraft.yaml when verifying user input in https://github.com/canonical-ols/build.snapcraft.io/blob/master/src/common/actions/repository-input.js#L33\r\n\r\nUp there we don't parse the response (we just check if the file exists), so for sure we need this raw response to parse it here, but ideally we should only ask the API once.\r\n\r\n@cjwatson @katiefenn We are getting to the point where we have some 'loose' pieces without having a bigger picture how all of them would work together in the end.\r\nWe have GH and SSO authentication, GH repo input and verification, getting data from LP and creating new snap/build, then listing builds...\r\n\r\nIt would be worth having some kind of flow chart of the whole user path through the app. It would clarify both user path and all the internal and external (to LP, GH) API calls we need on the way.","created_at":"2016-12-14T09:54:52Z","updated_at":"2016-12-14T09:55:37Z","html_url":"https://github.com/canonical-ols/build.snapcraft.io/pull/31#discussion_r92356480","pull_request_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31","_links":{"self":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/comments/92356480"},"html":{"href":"https://github.com/canonical-ols/build.snapcraft.io/pull/31#discussion_r92356480"},"pull_request":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31"}}},"pull_request":{"url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31","id":97806175,"html_url":"https://github.com/canonical-ols/build.snapcraft.io/pull/31","diff_url":"https://github.com/canonical-ols/build.snapcraft.io/pull/31.diff","patch_url":"https://github.com/canonical-ols/build.snapcraft.io/pull/31.patch","issue_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/31","number":31,"state":"open","locked":false,"title":"Add /launchpad/snaps routes","user":{"login":"cjwatson","id":2429141,"avatar_url":"https://avatars.githubusercontent.com/u/2429141?v=3","gravatar_id":"","url":"https://api.github.com/users/cjwatson","html_url":"https://github.com/cjwatson","followers_url":"https://api.github.com/users/cjwatson/followers","following_url":"https://api.github.com/users/cjwatson/following{/other_user}","gists_url":"https://api.github.com/users/cjwatson/gists{/gist_id}","starred_url":"https://api.github.com/users/cjwatson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjwatson/subscriptions","organizations_url":"https://api.github.com/users/cjwatson/orgs","repos_url":"https://api.github.com/users/cjwatson/repos","events_url":"https://api.github.com/users/cjwatson/events{/privacy}","received_events_url":"https://api.github.com/users/cjwatson/received_events","type":"User","site_admin":false},"body":"POST /launchpad/snaps creates a Snap object on Launchpad with the given\r\nURL; GET /launchpad/snaps returns a Snap object on Launchpad owned by\r\nthis service's user, if any.\r\n\r\nThere's no front-end code for this yet, and it isn't yet possible to choose which architectures to enable; but this should be a good start and we can refine it later.","created_at":"2016-12-13T18:17:11Z","updated_at":"2016-12-14T09:55:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"921476c2051ccceb36c51988a15d19f4a726290e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31/commits","review_comments_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31/comments","review_comment_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/31/comments","statuses_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/statuses/fa099818e95a3adc9ce3b6c11f368497112de01b","head":{"label":"cjwatson:lp-create-snap-backend","ref":"lp-create-snap-backend","sha":"fa099818e95a3adc9ce3b6c11f368497112de01b","user":{"login":"cjwatson","id":2429141,"avatar_url":"https://avatars.githubusercontent.com/u/2429141?v=3","gravatar_id":"","url":"https://api.github.com/users/cjwatson","html_url":"https://github.com/cjwatson","followers_url":"https://api.github.com/users/cjwatson/followers","following_url":"https://api.github.com/users/cjwatson/following{/other_user}","gists_url":"https://api.github.com/users/cjwatson/gists{/gist_id}","starred_url":"https://api.github.com/users/cjwatson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjwatson/subscriptions","organizations_url":"https://api.github.com/users/cjwatson/orgs","repos_url":"https://api.github.com/users/cjwatson/repos","events_url":"https://api.github.com/users/cjwatson/events{/privacy}","received_events_url":"https://api.github.com/users/cjwatson/received_events","type":"User","site_admin":false},"repo":{"id":74580616,"name":"build.snapcraft.io","full_name":"cjwatson/build.snapcraft.io","owner":{"login":"cjwatson","id":2429141,"avatar_url":"https://avatars.githubusercontent.com/u/2429141?v=3","gravatar_id":"","url":"https://api.github.com/users/cjwatson","html_url":"https://github.com/cjwatson","followers_url":"https://api.github.com/users/cjwatson/followers","following_url":"https://api.github.com/users/cjwatson/following{/other_user}","gists_url":"https://api.github.com/users/cjwatson/gists{/gist_id}","starred_url":"https://api.github.com/users/cjwatson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjwatson/subscriptions","organizations_url":"https://api.github.com/users/cjwatson/orgs","repos_url":"https://api.github.com/users/cjwatson/repos","events_url":"https://api.github.com/users/cjwatson/events{/privacy}","received_events_url":"https://api.github.com/users/cjwatson/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/cjwatson/build.snapcraft.io","description":"The Snapcraft Build site.","fork":true,"url":"https://api.github.com/repos/cjwatson/build.snapcraft.io","forks_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/forks","keys_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/teams","hooks_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/hooks","issue_events_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/issues/events{/number}","events_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/events","assignees_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/assignees{/user}","branches_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/branches{/branch}","tags_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/tags","blobs_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/statuses/{sha}","languages_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/languages","stargazers_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/stargazers","contributors_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/contributors","subscribers_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/subscribers","subscription_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/subscription","commits_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/contents/{+path}","compare_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/merges","archive_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/downloads","issues_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/issues{/number}","pulls_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/pulls{/number}","milestones_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/milestones{/number}","notifications_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/labels{/name}","releases_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/releases{/id}","deployments_url":"https://api.github.com/repos/cjwatson/build.snapcraft.io/deployments","created_at":"2016-11-23T13:44:40Z","updated_at":"2016-11-23T13:44:43Z","pushed_at":"2016-12-14T02:34:22Z","git_url":"git://github.com/cjwatson/build.snapcraft.io.git","ssh_url":"git@github.com:cjwatson/build.snapcraft.io.git","clone_url":"https://github.com/cjwatson/build.snapcraft.io.git","svn_url":"https://github.com/cjwatson/build.snapcraft.io","homepage":"","size":124,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"canonical-ols:master","ref":"master","sha":"a69b8ce4a0187416000fba7f50f28eea3d8545b4","user":{"login":"canonical-ols","id":17836138,"avatar_url":"https://avatars.githubusercontent.com/u/17836138?v=3","gravatar_id":"","url":"https://api.github.com/users/canonical-ols","html_url":"https://github.com/canonical-ols","followers_url":"https://api.github.com/users/canonical-ols/followers","following_url":"https://api.github.com/users/canonical-ols/following{/other_user}","gists_url":"https://api.github.com/users/canonical-ols/gists{/gist_id}","starred_url":"https://api.github.com/users/canonical-ols/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/canonical-ols/subscriptions","organizations_url":"https://api.github.com/users/canonical-ols/orgs","repos_url":"https://api.github.com/users/canonical-ols/repos","events_url":"https://api.github.com/users/canonical-ols/events{/privacy}","received_events_url":"https://api.github.com/users/canonical-ols/received_events","type":"Organization","site_admin":false},"repo":{"id":74463479,"name":"build.snapcraft.io","full_name":"canonical-ols/build.snapcraft.io","owner":{"login":"canonical-ols","id":17836138,"avatar_url":"https://avatars.githubusercontent.com/u/17836138?v=3","gravatar_id":"","url":"https://api.github.com/users/canonical-ols","html_url":"https://github.com/canonical-ols","followers_url":"https://api.github.com/users/canonical-ols/followers","following_url":"https://api.github.com/users/canonical-ols/following{/other_user}","gists_url":"https://api.github.com/users/canonical-ols/gists{/gist_id}","starred_url":"https://api.github.com/users/canonical-ols/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/canonical-ols/subscriptions","organizations_url":"https://api.github.com/users/canonical-ols/orgs","repos_url":"https://api.github.com/users/canonical-ols/repos","events_url":"https://api.github.com/users/canonical-ols/events{/privacy}","received_events_url":"https://api.github.com/users/canonical-ols/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/canonical-ols/build.snapcraft.io","description":"The Snapcraft Build site.","fork":false,"url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io","forks_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/forks","keys_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/teams","hooks_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/hooks","issue_events_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/events{/number}","events_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/events","assignees_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/assignees{/user}","branches_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/branches{/branch}","tags_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/tags","blobs_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/statuses/{sha}","languages_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/languages","stargazers_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/stargazers","contributors_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/contributors","subscribers_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/subscribers","subscription_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/subscription","commits_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/contents/{+path}","compare_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/merges","archive_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/downloads","issues_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues{/number}","pulls_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls{/number}","milestones_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/milestones{/number}","notifications_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/labels{/name}","releases_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/releases{/id}","deployments_url":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/deployments","created_at":"2016-11-22T10:55:35Z","updated_at":"2016-11-23T09:48:21Z","pushed_at":"2016-12-14T02:34:22Z","git_url":"git://github.com/canonical-ols/build.snapcraft.io.git","ssh_url":"git@github.com:canonical-ols/build.snapcraft.io.git","clone_url":"https://github.com/canonical-ols/build.snapcraft.io.git","svn_url":"https://github.com/canonical-ols/build.snapcraft.io","homepage":"","size":140,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":3,"forks":2,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31"},"html":{"href":"https://github.com/canonical-ols/build.snapcraft.io/pull/31"},"issue":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/31"},"comments":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/issues/31/comments"},"review_comments":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31/comments"},"review_comment":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/pulls/31/commits"},"statuses":{"href":"https://api.github.com/repos/canonical-ols/build.snapcraft.io/statuses/fa099818e95a3adc9ce3b6c11f368497112de01b"}}}}
{"actor":{"display_login":"bartaz"}}