{"action":"created","comment":{"url":"https://api.github.com/repos/auth0/blog/pulls/comments/98267850","pull_request_review_id":18906513,"id":98267850,"diff_hunk":"@@ -0,0 +1,818 @@\n+---\n+layout: post\n+title: \"Migrating a PHP 5 App to PHP 7 (Tools & Implementation) - Part 3\"\n+description: \"Let's go through migrating a simple PHP 5 app to PHP 7\"\n+date: 2017-01-26 8:30\n+category: Technical Guide, PHP, Tools\n+author:\n+  name: \"Prosper Otemuyiwa\"\n+  url: \"http://twitter.com/unicodeveloper?lang=en\"\n+  mail: \"prosper.otemuyiwa@auth0.com\"\n+  avatar: \"https://en.gravatar.com/avatar/1097492785caf9ffeebffeb624202d8f?s=200\"\n+design:\n+  image: https://cdn.auth0.com/blog/migration/PHPlogo.png\n+  bg_color: \"#312A4C\"\n+tags:\n+- php5\n+- php7\n+- migrate\n+related:\n+- 2016-11-07-migrating-a-php5-app-to-7\n+- 2016-11-09-migrating-a-php5-app-to-7-part-2\n+---\n+\n+\n+**TL;DR:** Many PHP applications are still running on PHP 5.x, not ready to take full advantage of the awesome features that PHP 7 offers. A lot of developers have not made the switch because of certain fears of compatibility issues, migration challenges and the strange awkward feeling that migrating will take away a big chunk of their time. In the [first part of this tutorial](#link-to-part-1) we learned how to set up a PHP 7 development environment. In [the second part of this tutorial](#link-to-part-two), we discussed extensively about all the new features PHP 7 offers and the language constructs and features that have been either removed or deprecated. This time, we'll learn about all the new PHP 7 features and how you can leverage them when migrating your PHP 5 app to PHP 7.\n+\n+---\n+\n+You need to be aware that for the most part, PHP 5.x code can run on PHP 7. In PHP 7, there are some backwards incompatible changes, so applications built with PHP 5.x that use functions and language constructs that have been removed or have the internal implementation changed drastically will spit out errors while trying to run on PHP 7. \n+\n+## Tools to Aid Migration\n+\n+One of the most frustating part of our jobs as software developers is having to work on large old codebases. In a situation where you are tasked with migrating a large PHP 5.x application that has probably been in existence for about 10 years, how would you go about it?\n+\n+The easiest and most obvious way of migrating is to initially clone the app on your local machine, install PHP 7 and run the app. You can walk through the errors and deperaction warnings shown in the terminal, and manually fix them step-by-step by incorporating PHP 7 features. This can be very challenging and time consuming. Why can't we automate this process?\n+\n+Currently there is no tool out there that performs a 100% automatic conversion of your PHP 5.x codebase to PHP 7, but these tools below will help in making your migration painless.\n+\n+### PHP 7 MAR\n+\n+[php7mar](https://github.com/Alexia/php7mar) is a command-line tool that generates reports on PHP 5.x codebase based on PHP 7 compatibility. The reports contain line numbers, issues noted, and suggested fixes along with documentation links.\n+\n+**Note:** The tool does not fix code. It only gives you reports about all the PHP files in your codebase. Happy fixing!\n+\n+### PHP 7 Compatibility Checker\n+\n+[php7cc](https://github.com/sstalle/php7cc) is a command-line tool designed to make migration from PHP 5.3 - 5.6 to PHP 7 really easy. php7cc reports:\n+\n+* **Errors:** Fatal, Syntax, Notice. These are highlighted in red.\n+* **Warnings:** These are highlighted in yellow.\n+\n+### Phan\n+\n+[phan](https://github.com/etsy/phan) is a static analyzer for PHP that attempts to prove incorrectness rather than correctness. Phan looks for common issues and verifies type compatibility on various operations when type information is available or can be deduced. Phan checks for lots of things including PHP7/PHP5 backward compatibility.\n+\n+### phpto7aid\n+\n+[phpto7aid](https://github.com/gisostallenberg/php-to-7-aid) is a tool that is used to identify PHP 5 code that will not work in PHP 7. It tries to aid you as much as possible in resolving this issues, by either providing the exact solution or giving hints on how to solve the issue.\n+\n+### PhpStorm PHP 7 Compatibility Inspection\n+\n+[PhpStorm](https://www.jetbrains.com/phpstorm) is a very smart PHP IDE, developed by [Jetbrains](https://www.jetbrains.com). \n+\n+![PHPStorm](https://cdn.auth0.com/blog/php/phpstorm_debugging.png)\n+_Source: Jetbrains.com_\n+\n+PhpStorm 10 comes with a *PHP 7 Compatibility Inspection* tool that can show you exactly what code is going to cause errors if you are running PHP7.\n+\n+![PHP 7 Readiness](https://cdn.auth0.com/blog/php/PHP7-Readiness-Inline-2.png)\n+_Source: Jetbrains.com_\n+\n+The image below shows a typical example of an application that has classes with names that are reserved in PHP 7. Selecting **Run Inspection By Name** option from the **Code** menu, and then selecting the **PHP 7 Compatibility** section will give you results like this one below:\n+\n+![](https://cdn.auth0.com/blog/php/PHP7-Readiness-Results.png)\n+_Source: Jetbrains.com_\n+\n+## Work with First App\n+\n+We will build the first simple PHP 5 app very quickly. This is the scope of the app:\n+\n+* A user will be able to register on the app.\n+* A user will be able to log into the app.\n+* A user will be assigned a random Star Wars Code Name.\n+* A user will be able to log out of the app.\n+\n+Building this app will require us to set up a database to store the users, write our registration and login code and manage the users session. Now, we won't employ the use of any framework because we don't want any form of overhead. Ordinarily, building this app will take a lot of time and setup but there is a service we can use to eliminate the hassle. Oh, yeah, Auth0 to the rescue!\n+\n+### Create and Configure Auth0 Client\n+\n+First thing we'll need to do is <a href=\"javascript:signup()\">sign up for a free Auth0 account</a> and configure a new client.\n+\n+Now head over to [clients](https://manage.auth0.com/#/clients) and create a new one choosing 'Regular web Application' as the client type. Let's name it as something like 'Basic PHP WebApp'.\n+\n+Now that we have our client created, we need to take note of three properties: `Domain`, `Client ID` and `Client Secret`. All of them can be found on the `Settings` tab of the client that we've just created.\n+\n+The last configuration that we need to do, before updating our code, is to add `http://localhost:3000` as an `Allowed Callback URLs` on our Auth0 client.\n+\n+### Build the App\n+\n+Create a `composer.json` file in a new directory and add this to it like so:\n+\n+```js\n+\n+{\n+    \"name\": \"basic php webapp\",\n+    \"description\": \"Basic sample for securing a WebApp with Auth0\",\n+    \"require\": {\n+         \"vlucas/phpdotenv\": \"2.3.0\",\n+         \"auth0/auth0-php\": \"~4.0\"\n+    },\n+    \"license\": \"MIT\"\n+}\n+\n+```\n+_composer.json_\n+\n+All we need is the `phpdotenv` package for reading environment variables and the `auth0-php` package that makes it easy to use the Auth0 service.\n+\n+Create a `public` folder inside the directory and add two files, `app.css` and `app.js` in it.\n+\n+```css\n+\n+body {\n+  font-family: \"proxima-nova\", sans-serif;\n+  text-align: center;\n+  font-size: 300%;\n+  font-weight: 100;\n+}\n+input[type=checkbox],\n+input[type=radio] {\n+  position: absolute;\n+  opacity: 0;\n+}\n+input[type=checkbox] + label,\n+input[type=radio] + label {\n+  display: inline-block;\n+}\n+input[type=checkbox] + label:before,\n+input[type=radio] + label:before {\n+  content: \"\";\n+  display: inline-block;\n+  vertical-align: -0.2em;\n+  width: 1em;\n+  height: 1em;\n+  border: 0.15em solid #0074d9;\n+  border-radius: 0.2em;\n+  margin-right: 0.3em;\n+  background-color: white;\n+}\n+input[type=radio] + label:before {\n+  border-radius: 50%;\n+}\n+input[type=radio]:checked + label:before,\n+input[type=checkbox]:checked + label:before {\n+  background-color: #0074d9;\n+  box-shadow: inset 0 0 0 0.15em white;\n+}\n+input[type=radio]:focus + label:before,\n+input[type=checkbox]:focus + label:before {\n+  outline: 0;\n+}\n+.btn {\n+  font-size: 140%;\n+  text-transform: uppercase;\n+  letter-spacing: 1px;\n+  border: 0;\n+  background-color: #16214D;\n+  color: white;\n+}\n+.btn:hover {\n+  background-color: #44C7F4;\n+}\n+.btn:focus {\n+  outline: none !important;\n+}\n+.btn.btn-lg {\n+  padding: 20px 30px;\n+}\n+.btn:disabled {\n+  background-color: #333;\n+  color: #666;\n+}\n+h1,\n+h2,\n+h3 {\n+  font-weight: 100;\n+}\n+#logo img {\n+  width: 300px;\n+  margin-bottom: 60px;\n+}\n+.home-description {\n+  font-weight: 100;\n+  margin: 100px 0;\n+}\n+h2 {\n+  margin-top: 30px;\n+  margin-bottom: 40px;\n+  font-size: 200%;\n+}\n+label {\n+  font-size: 100%;\n+  font-weight: 300;\n+}\n+.btn-next {\n+  margin-top: 30px;\n+}\n+.answer {\n+  width: 70%;\n+  margin: auto;\n+  text-align: left;\n+  padding-left: 10%;\n+  margin-bottom: 20px;\n+}\n+.login-page .login-box {\n+  padding: 5px 0;\n+}\n+\n+```\n+\n+_app.css_\n+\n+```js\n+\n+$(document).ready(function() {\n+\n+    var lock = new Auth0Lock(AUTH0_CLIENT_ID, AUTH0_DOMAIN, { auth: {\n+          redirectUrl: AUTH0_CALLBACK_URL\n+          , responseType: 'code'\n+          , params: {\n+              scope: 'openid'\n+          }\n+      }});\n+\n+    $('.btn-login').click(function(e) {\n+      e.preventDefault();\n+      lock.show();\n+    });\n+});\n+\n+```\n+\n+_app.js_\n+\n+Go ahead and create a `.htaccess` file inside the directory like so:\n+\n+```bash\n+\n+RewriteEngine On\n+RewriteCond %{REQUEST_FILENAME} !-f\n+RewriteCond %{REQUEST_FILENAME} !-d\n+RewriteRule . index.php [L]\n+\n+```\n+\n+Create a `.env` file. This file will contain our Auth0 credentials.\n+\n+```bash\n+\n+AUTH0_DOMAIN='blahabababababa.auth0.com'\n+AUTH0_CLIENT_ID='xxxxxxxxx'\n+AUTH0_CLIENT_SECRET='xxxxxxxxx'\n+AUTH0_CALLBACK_URL='http://localhost:3000'\n+\n+```\n+\n+**Note:** Replace these values with the `client_id`, `client_secret` and `domain` from your Auth0 dashboard.\n+\n+Add the value of `callback_url` to the **Allowed Callback URLs** in your *Settings* on the dashboard.\n+\n+![Auth0 Dashboard showcasing Callback Url](https://cdn.auth0.com/blog/app/callbackurl.png)\n+_Auth0 dashboard: Allowed Callback Urls_\n+\n+Also, do not forget to add the same value to the **Allowed Origins(CORS)** in your *Settings* on the dashboard.\n+\n+![Auth0 Dashboard showcasing Allowed Origin Cors](https://cdn.auth0.com/blog/app/cors.png)\n+_Auth0 dashboard: Allowed Origin CORS_\n+\n+\n+We need a file to invoke the `dotenv` library and load the values that we have deposited in the `.env` file. Create a new file, *dotenv-loader.php* like so:\n+\n+```php\n+\n+<?php\n+\n+  // Read .env\n+  try {\n+    $dotenv = new Dotenv\\Dotenv(__DIR__);\n+    $dotenv->load();\n+  } catch(InvalidArgumentException $ex) {\n+    // Ignore if no dotenv\n+  }\n+\n+```\n+_dotenv-loader.php_\n+\n+Finally, let's create the `index.php` file where all our app logic will reside. Like I mentioned earlier, it's just a basic app so don't be worried about separation of concerns.\n+\n+This is how the file should look like:\n+\n+{% highlight html %}\n+<?php\n+\n+// Require composer autoloader\n+require __DIR__ . '/vendor/autoload.php';\n+\n+require __DIR__ . '/dotenv-loader.php';\n+\n+use Auth0\\SDK\\API\\Authentication;\n+\n+$domain        = getenv('AUTH0_DOMAIN');\n+$client_id     = getenv('AUTH0_CLIENT_ID');\n+$client_secret = getenv('AUTH0_CLIENT_SECRET');\n+$redirect_uri  = getenv('AUTH0_CALLBACK_URL');\n+\n+$auth0 = new Authentication($domain, $client_id);\n+\n+$auth0Oauth = $auth0->get_oauth_client($client_secret, $redirect_uri, [\n+  'persist_id_token' => true,\n+  'persist_refresh_token' => true,\n+]);\n+\n+$starWarsNames = ['Darth Vader', 'Ahsoka Tano', 'Kylo Ren', 'Obi-Wan Kenobi', 'R2-D2', 'Snoke'];\n+\n+$userInfo = $auth0Oauth->getUser();\n+\n+if (isset($_REQUEST['logout'])) {\n+    $auth0Oauth->logout();\n+    session_destroy();\n+    header(\"Location: /\");\n+}\n+\n+?>\n+<html>\n+    <head>\n+        <script src=\"http://code.jquery.com/jquery-3.0.0.min.js\" type=\"text/javascript\"></script>\n+        <script src=\"https://cdn.auth0.com/js/lock/10.0/lock.min.js\"></script>\n+\n+        <script type=\"text/javascript\" src=\"//use.typekit.net/iws6ohy.js\"></script>\n+        <script type=\"text/javascript\">try{Typekit.load();}catch(e){}</script>\n+\n+        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n+\n+        <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png\" sizes=\"32x32\">\n+ \n+        <!-- font awesome from BootstrapCDN -->\n+        <link href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css\" rel=\"stylesheet\">\n+        <link href=\"//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css\" rel=\"stylesheet\">\n+\n+        <script>\n+          var AUTH0_CLIENT_ID = '<?php echo getenv(\"AUTH0_CLIENT_ID\") ?>';\n+          var AUTH0_DOMAIN = '<?php echo getenv(\"AUTH0_DOMAIN\") ?>';\n+          var AUTH0_CALLBACK_URL = '<?php echo getenv(\"AUTH0_CALLBACK_URL\") ?>';\n+        </script>\n+\n+\n+        <script src=\"public/app.js\"> </script>\n+        <link href=\"public/app.css\" rel=\"stylesheet\">\n+\n+\n+\n+    </head>\n+    <body class=\"home\">\n+        <div class=\"container\">\n+            <div class=\"login-page clearfix\">\n+              <?php if(!$userInfo): ?>\n+              <div class=\"login-box auth0-box before\">\n+                <img src=\"https://cdn.auth0.com/blog/app/star_warsapp.png\" />\n+                <p>Heard you don't want to migrate to PHP 7? Dare us!</p>\n+                <a class=\"btn btn-primary btn-login\">SignIn</a>\n+              </div>\n+              <?php else: ?>\n+              <div class=\"logged-in-box auth0-box logged-in\">\n+                <h1 id=\"logo\">Star Wars Welcomes You to the Family!</h1>\n+                <img class=\"avatar\" width=\"200\" src=\"<?php echo $userInfo['picture'] ?>\"/>\n+\n+                <h2>Welcome <span class=\"nickname\"><?php echo $userInfo['nickname'] ?></span></h2>\n+                <h2> Assigned Codename : <b><?php echo $starWarsNames[rand(0, 6)]; ?></b> </h2>\n+                <a class=\"btn btn-primary btn-lg\" href=\"?logout\">Logout</a>\n+              </div>\n+              <?php endif ?>\n+            </div>\n+        </div>\n+    </body>\n+</html>\n+{% endhighlight %}\n+\n+Relax, let's analyze the code together.\n+\n+```php\n+\n+// Require composer autoloader\n+require __DIR__ . '/vendor/autoload.php';\n+\n+require __DIR__ . '/dotenv-loader.php';\n+\n+```\n+\n+This is where we require the dotenv loader and composer autoloader. The autoloader makes it possible for us to import any class from the PHP packages installed in the app.\n+\n+```php\n+\n+use Auth0\\SDK\\API\\Authentication;\n+\n+$domain        = getenv('AUTH0_DOMAIN');\n+$client_id     = getenv('AUTH0_CLIENT_ID');\n+$client_secret = getenv('AUTH0_CLIENT_SECRET');\n+$redirect_uri  = getenv('AUTH0_CALLBACK_URL');\n+\n+$auth0 = new Authentication($domain, $client_id);\n+\n+$auth0Oauth = $auth0->get_oauth_client($client_secret, $redirect_uri, [\n+  'persist_id_token' => true,\n+  'persist_refresh_token' => true,\n+]);\n+\n+$starWarsNames = ['Darth Vader', 'Ahsoka Tano', 'Kylo Ren', 'Obi-Wan Kenobi', 'R2-D2', 'Snoke'];\n+\n+$userInfo = $auth0Oauth->getUser();\n+\n+```\n+\n+`Auth0\\SDK\\API\\Authentication` is the Auth0 authentication class. It has the methods to retrieve a user's profile when logged in. `$domain`, `$client_id`, `$client_secret`, `$redirect_uri` are variables that will house the values gotten from the `.env` file with the aid of the `getenv` method.\n+\n+Then, we moved on to instantiating the `Authentication` class.\n+\n+The `$auth0->get_oauth_client()` method by default stores user information in the PHP session, and we also instructed it to save the `access_token` and `id_token`. \n+\n+`$starWarsNames` array contains some characters from Star Wars. Later in the code, a user will be assigned a random code name from this array.\n+\n+`$auth0Oauth->getUser()` retrieves the user information.\n+\n+```php\n+\n+if (isset($_REQUEST['logout'])) {\n+    $auth0Oauth->logout();\n+    session_destroy();\n+    header(\"Location: /\");\n+}\n+\n+```\n+\n+This checks if the user submitted a request to log out, clears the session and redirects the user back to the homepage.\n+\n+{% highlight html %}\n+<script src=\"http://code.jquery.com/jquery-3.0.0.min.js\" type=\"text/javascript\"></script>\n+<script src=\"https://cdn.auth0.com/js/lock/10.0/lock.min.js\"></script>\n+{% endhighlight %}\n+\n+We are making use of Auth0 Lock widget, and we also using jQuery to call the lock methods and handle button click event.","path":"_posts/2017-01-26-migrating-a-php5-app-to-7-part-three.markdown","position":450,"original_position":450,"commit_id":"7a7d50cc49d833b9d65a864c2787977ec6f7ae1a","original_commit_id":"7a7d50cc49d833b9d65a864c2787977ec6f7ae1a","user":{"login":"kukicado","id":1770570,"avatar_url":"https://avatars.githubusercontent.com/u/1770570?v=3","gravatar_id":"","url":"https://api.github.com/users/kukicado","html_url":"https://github.com/kukicado","followers_url":"https://api.github.com/users/kukicado/followers","following_url":"https://api.github.com/users/kukicado/following{/other_user}","gists_url":"https://api.github.com/users/kukicado/gists{/gist_id}","starred_url":"https://api.github.com/users/kukicado/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kukicado/subscriptions","organizations_url":"https://api.github.com/users/kukicado/orgs","repos_url":"https://api.github.com/users/kukicado/repos","events_url":"https://api.github.com/users/kukicado/events{/privacy}","received_events_url":"https://api.github.com/users/kukicado/received_events","type":"User","site_admin":false},"body":"Link to Lock landing page :)","created_at":"2017-01-27T19:02:33Z","updated_at":"2017-01-27T19:08:16Z","html_url":"https://github.com/auth0/blog/pull/618#discussion_r98267850","pull_request_url":"https://api.github.com/repos/auth0/blog/pulls/618","_links":{"self":{"href":"https://api.github.com/repos/auth0/blog/pulls/comments/98267850"},"html":{"href":"https://github.com/auth0/blog/pull/618#discussion_r98267850"},"pull_request":{"href":"https://api.github.com/repos/auth0/blog/pulls/618"}}},"pull_request":{"url":"https://api.github.com/repos/auth0/blog/pulls/618","id":103418961,"html_url":"https://github.com/auth0/blog/pull/618","diff_url":"https://github.com/auth0/blog/pull/618.diff","patch_url":"https://github.com/auth0/blog/pull/618.patch","issue_url":"https://api.github.com/repos/auth0/blog/issues/618","number":618,"state":"open","locked":false,"title":"Migrating a php5app to php7 part three (Tools & Implementation)","user":{"login":"unicodeveloper","id":2946769,"avatar_url":"https://avatars.githubusercontent.com/u/2946769?v=3","gravatar_id":"","url":"https://api.github.com/users/unicodeveloper","html_url":"https://github.com/unicodeveloper","followers_url":"https://api.github.com/users/unicodeveloper/followers","following_url":"https://api.github.com/users/unicodeveloper/following{/other_user}","gists_url":"https://api.github.com/users/unicodeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/unicodeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unicodeveloper/subscriptions","organizations_url":"https://api.github.com/users/unicodeveloper/orgs","repos_url":"https://api.github.com/users/unicodeveloper/repos","events_url":"https://api.github.com/users/unicodeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/unicodeveloper/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-01-27T00:29:26Z","updated_at":"2017-01-27T19:08:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a172fb0cbb71bda2190481c05799cd140501c57e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/auth0/blog/pulls/618/commits","review_comments_url":"https://api.github.com/repos/auth0/blog/pulls/618/comments","review_comment_url":"https://api.github.com/repos/auth0/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/auth0/blog/issues/618/comments","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/7a7d50cc49d833b9d65a864c2787977ec6f7ae1a","head":{"label":"auth0:migrating-php5app-to-php7-part-three","ref":"migrating-php5app-to-php7-part-three","sha":"7a7d50cc49d833b9d65a864c2787977ec6f7ae1a","user":{"login":"auth0","id":2824157,"avatar_url":"https://avatars.githubusercontent.com/u/2824157?v=3","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"repo":{"id":7830124,"name":"blog","full_name":"auth0/blog","owner":{"login":"auth0","id":2824157,"avatar_url":"https://avatars.githubusercontent.com/u/2824157?v=3","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/auth0/blog","description":"auth0 blog","fork":false,"url":"https://api.github.com/repos/auth0/blog","forks_url":"https://api.github.com/repos/auth0/blog/forks","keys_url":"https://api.github.com/repos/auth0/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/auth0/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/auth0/blog/teams","hooks_url":"https://api.github.com/repos/auth0/blog/hooks","issue_events_url":"https://api.github.com/repos/auth0/blog/issues/events{/number}","events_url":"https://api.github.com/repos/auth0/blog/events","assignees_url":"https://api.github.com/repos/auth0/blog/assignees{/user}","branches_url":"https://api.github.com/repos/auth0/blog/branches{/branch}","tags_url":"https://api.github.com/repos/auth0/blog/tags","blobs_url":"https://api.github.com/repos/auth0/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/auth0/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/auth0/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/auth0/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/auth0/blog/languages","stargazers_url":"https://api.github.com/repos/auth0/blog/stargazers","contributors_url":"https://api.github.com/repos/auth0/blog/contributors","subscribers_url":"https://api.github.com/repos/auth0/blog/subscribers","subscription_url":"https://api.github.com/repos/auth0/blog/subscription","commits_url":"https://api.github.com/repos/auth0/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/auth0/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/auth0/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/auth0/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/auth0/blog/contents/{+path}","compare_url":"https://api.github.com/repos/auth0/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/auth0/blog/merges","archive_url":"https://api.github.com/repos/auth0/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/auth0/blog/downloads","issues_url":"https://api.github.com/repos/auth0/blog/issues{/number}","pulls_url":"https://api.github.com/repos/auth0/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/auth0/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/auth0/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/auth0/blog/labels{/name}","releases_url":"https://api.github.com/repos/auth0/blog/releases{/id}","deployments_url":"https://api.github.com/repos/auth0/blog/deployments","created_at":"2013-01-25T22:57:37Z","updated_at":"2016-12-04T22:15:54Z","pushed_at":"2017-01-27T18:57:11Z","git_url":"git://github.com/auth0/blog.git","ssh_url":"git@github.com:auth0/blog.git","clone_url":"https://github.com/auth0/blog.git","svn_url":"https://github.com/auth0/blog","homepage":"https://auth0.com/blog","size":16809,"stargazers_count":26,"watchers_count":26,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":55,"mirror_url":null,"open_issues_count":31,"forks":55,"open_issues":31,"watchers":26,"default_branch":"master"}},"base":{"label":"auth0:master","ref":"master","sha":"77e765f892d5a242d23a31b55aba14f20ac8e106","user":{"login":"auth0","id":2824157,"avatar_url":"https://avatars.githubusercontent.com/u/2824157?v=3","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"repo":{"id":7830124,"name":"blog","full_name":"auth0/blog","owner":{"login":"auth0","id":2824157,"avatar_url":"https://avatars.githubusercontent.com/u/2824157?v=3","gravatar_id":"","url":"https://api.github.com/users/auth0","html_url":"https://github.com/auth0","followers_url":"https://api.github.com/users/auth0/followers","following_url":"https://api.github.com/users/auth0/following{/other_user}","gists_url":"https://api.github.com/users/auth0/gists{/gist_id}","starred_url":"https://api.github.com/users/auth0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/auth0/subscriptions","organizations_url":"https://api.github.com/users/auth0/orgs","repos_url":"https://api.github.com/users/auth0/repos","events_url":"https://api.github.com/users/auth0/events{/privacy}","received_events_url":"https://api.github.com/users/auth0/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/auth0/blog","description":"auth0 blog","fork":false,"url":"https://api.github.com/repos/auth0/blog","forks_url":"https://api.github.com/repos/auth0/blog/forks","keys_url":"https://api.github.com/repos/auth0/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/auth0/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/auth0/blog/teams","hooks_url":"https://api.github.com/repos/auth0/blog/hooks","issue_events_url":"https://api.github.com/repos/auth0/blog/issues/events{/number}","events_url":"https://api.github.com/repos/auth0/blog/events","assignees_url":"https://api.github.com/repos/auth0/blog/assignees{/user}","branches_url":"https://api.github.com/repos/auth0/blog/branches{/branch}","tags_url":"https://api.github.com/repos/auth0/blog/tags","blobs_url":"https://api.github.com/repos/auth0/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/auth0/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/auth0/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/auth0/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/auth0/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/auth0/blog/languages","stargazers_url":"https://api.github.com/repos/auth0/blog/stargazers","contributors_url":"https://api.github.com/repos/auth0/blog/contributors","subscribers_url":"https://api.github.com/repos/auth0/blog/subscribers","subscription_url":"https://api.github.com/repos/auth0/blog/subscription","commits_url":"https://api.github.com/repos/auth0/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/auth0/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/auth0/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/auth0/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/auth0/blog/contents/{+path}","compare_url":"https://api.github.com/repos/auth0/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/auth0/blog/merges","archive_url":"https://api.github.com/repos/auth0/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/auth0/blog/downloads","issues_url":"https://api.github.com/repos/auth0/blog/issues{/number}","pulls_url":"https://api.github.com/repos/auth0/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/auth0/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/auth0/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/auth0/blog/labels{/name}","releases_url":"https://api.github.com/repos/auth0/blog/releases{/id}","deployments_url":"https://api.github.com/repos/auth0/blog/deployments","created_at":"2013-01-25T22:57:37Z","updated_at":"2016-12-04T22:15:54Z","pushed_at":"2017-01-27T18:57:11Z","git_url":"git://github.com/auth0/blog.git","ssh_url":"git@github.com:auth0/blog.git","clone_url":"https://github.com/auth0/blog.git","svn_url":"https://github.com/auth0/blog","homepage":"https://auth0.com/blog","size":16809,"stargazers_count":26,"watchers_count":26,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":55,"mirror_url":null,"open_issues_count":31,"forks":55,"open_issues":31,"watchers":26,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/auth0/blog/pulls/618"},"html":{"href":"https://github.com/auth0/blog/pull/618"},"issue":{"href":"https://api.github.com/repos/auth0/blog/issues/618"},"comments":{"href":"https://api.github.com/repos/auth0/blog/issues/618/comments"},"review_comments":{"href":"https://api.github.com/repos/auth0/blog/pulls/618/comments"},"review_comment":{"href":"https://api.github.com/repos/auth0/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/auth0/blog/pulls/618/commits"},"statuses":{"href":"https://api.github.com/repos/auth0/blog/statuses/7a7d50cc49d833b9d65a864c2787977ec6f7ae1a"}}}}
{"actor":{"display_login":"kukicado"}}