<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[178200] trunk/Websites/perf.webkit.org</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/178200">178200</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-09 14:25:31 -0800 (Fri, 09 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>api/report-commit should authenticate with a slave name and password
https://bugs.webkit.org/show_bug.cgi?id=140308

Reviewed by Benjamin Poulain.

Use a slave name and a password to authenticate new commit reports.

* public/api/report-commits.php:
(main):
* public/include/json-header.php:
(verify_slave): Renamed and repurposed from verify_builder in report-commits.php. Now authenticates with
a slave name and a password instead of a builder name and a password.
* tests/api-report-commits.js: Updated tests.
* tools/pull-svn.py:
(main): Renamed variables.
(submit_commits): Submits slaveName and slavePassword instead of builderName and builderPassword.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgChangeLog">trunk/Websites/perf.webkit.org/ChangeLog</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicapireportcommitsphp">trunk/Websites/perf.webkit.org/public/api/report-commits.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicincludejsonheaderphp">trunk/Websites/perf.webkit.org/public/include/json-header.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtestsapireportcommitsjs">trunk/Websites/perf.webkit.org/tests/api-report-commits.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolspullsvnpy">trunk/Websites/perf.webkit.org/tools/pull-svn.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebsitesperfwebkitorgChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/ChangeLog (178199 => 178200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/ChangeLog        2015-01-09 22:24:59 UTC (rev 178199)
+++ trunk/Websites/perf.webkit.org/ChangeLog        2015-01-09 22:25:31 UTC (rev 178200)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2015-01-09  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        api/report-commit should authenticate with a slave name and password
+        https://bugs.webkit.org/show_bug.cgi?id=140308
+
+        Reviewed by Benjamin Poulain.
+
+        Use a slave name and a password to authenticate new commit reports.
+
+        * public/api/report-commits.php:
+        (main):
+        * public/include/json-header.php:
+        (verify_slave): Renamed and repurposed from verify_builder in report-commits.php. Now authenticates with
+        a slave name and a password instead of a builder name and a password.
+        * tests/api-report-commits.js: Updated tests.
+        * tools/pull-svn.py:
+        (main): Renamed variables.
+        (submit_commits): Submits slaveName and slavePassword instead of builderName and builderPassword.
+
</ins><span class="cx"> 2014-12-19  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Perf dashboard should support authentication via a slave password
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicapireportcommitsphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/api/report-commits.php (178199 => 178200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/api/report-commits.php        2015-01-09 22:24:59 UTC (rev 178199)
+++ trunk/Websites/perf.webkit.org/public/api/report-commits.php        2015-01-09 22:25:31 UTC (rev 178200)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> 
</span><span class="cx">     $report = json_decode($post_data, true);
</span><span class="cx"> 
</span><del>-    verify_builder($db, $report);
</del><ins>+    verify_slave($db, $report);
</ins><span class="cx"> 
</span><span class="cx">     $commits = array_get($report, 'commits', array());
</span><span class="cx"> 
</span><span class="lines">@@ -73,20 +73,6 @@
</span><span class="cx">     exit_with_success();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function verify_builder($db, $report) {
-    array_key_exists('builderName', $report) or exit_with_error('MissingBuilderName');
-    array_key_exists('builderPassword', $report) or exit_with_error('MissingBuilderPassword');
-
-    $builder_info = array(
-        'name' =&gt; $report['builderName'],
-        'password_hash' =&gt; hash('sha256', $report['builderPassword'])
-    );
-
-    $matched_builder = $db-&gt;select_first_row('builders', 'builder', $builder_info);
-    if (!$matched_builder)
-        exit_with_error('BuilderNotFound', array('name' =&gt; $builder_info['name']));
-}
-
</del><span class="cx"> main($HTTP_RAW_POST_DATA);
</span><span class="cx"> 
</span><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicincludejsonheaderphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/include/json-header.php (178199 => 178200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/include/json-header.php        2015-01-09 22:24:59 UTC (rev 178199)
+++ trunk/Websites/perf.webkit.org/public/include/json-header.php        2015-01-09 22:25:31 UTC (rev 178200)
</span><span class="lines">@@ -111,4 +111,18 @@
</span><span class="cx">     return $expected_token &amp;&amp; $token == $expected_token &amp;&amp; $_COOKIE['CSRFExpiration'] &gt; time();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function verify_slave($db, $params) {
+    array_key_exists('slaveName', $params) or exit_with_error('MissingSlaveName');
+    array_key_exists('slavePassword', $params) or exit_with_error('MissingSlavePassword');
+
+    $slave_info = array(
+        'name' =&gt; $params['slaveName'],
+        'password_hash' =&gt; hash('sha256', $params['slavePassword'])
+    );
+
+    $matched_slave = $db-&gt;select_first_row('build_slaves', 'slave', $slave_info);
+    if (!$matched_slave)
+        exit_with_error('SlaveNotFound', array('name' =&gt; $slave_info['name']));
+}
+
</ins><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtestsapireportcommitsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tests/api-report-commits.js (178199 => 178200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tests/api-report-commits.js        2015-01-09 22:24:59 UTC (rev 178199)
+++ trunk/Websites/perf.webkit.org/tests/api-report-commits.js        2015-01-09 22:25:31 UTC (rev 178200)
</span><span class="lines">@@ -1,11 +1,11 @@
</span><span class="cx"> describe(&quot;/api/report-commits/&quot;, function () {
</span><span class="cx">     var emptyReport = {
</span><del>-        &quot;builderName&quot;: &quot;someBuilder&quot;,
-        &quot;builderPassword&quot;: &quot;somePassword&quot;,
</del><ins>+        &quot;slaveName&quot;: &quot;someSlave&quot;,
+        &quot;slavePassword&quot;: &quot;somePassword&quot;,
</ins><span class="cx">     };
</span><span class="cx">     var subversionCommit = {
</span><del>-        &quot;builderName&quot;: &quot;someBuilder&quot;,
-        &quot;builderPassword&quot;: &quot;somePassword&quot;,
</del><ins>+        &quot;slaveName&quot;: &quot;someSlave&quot;,
+        &quot;slavePassword&quot;: &quot;somePassword&quot;,
</ins><span class="cx">         &quot;commits&quot;: [
</span><span class="cx">             {
</span><span class="cx">                 &quot;repository&quot;: &quot;WebKit&quot;,
</span><span class="lines">@@ -17,8 +17,8 @@
</span><span class="cx">         ],
</span><span class="cx">     };
</span><span class="cx">     var subversionInvalidCommit = {
</span><del>-        &quot;builderName&quot;: &quot;someBuilder&quot;,
-        &quot;builderPassword&quot;: &quot;somePassword&quot;,
</del><ins>+        &quot;slaveName&quot;: &quot;someSlave&quot;,
+        &quot;slavePassword&quot;: &quot;somePassword&quot;,
</ins><span class="cx">         &quot;commits&quot;: [
</span><span class="cx">             {
</span><span class="cx">                 &quot;repository&quot;: &quot;WebKit&quot;,
</span><span class="lines">@@ -30,8 +30,8 @@
</span><span class="cx">         ],
</span><span class="cx">     };
</span><span class="cx">     var subversionTwoCommits = {
</span><del>-        &quot;builderName&quot;: &quot;someBuilder&quot;,
-        &quot;builderPassword&quot;: &quot;somePassword&quot;,
</del><ins>+        &quot;slaveName&quot;: &quot;someSlave&quot;,
+        &quot;slavePassword&quot;: &quot;somePassword&quot;,
</ins><span class="cx">         &quot;commits&quot;: [
</span><span class="cx">             {
</span><span class="cx">                 &quot;repository&quot;: &quot;WebKit&quot;,
</span><span class="lines">@@ -51,20 +51,20 @@
</span><span class="cx">         ]
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    function addBuilder(report, callback) {
-        queryAndFetchAll('INSERT INTO builders (builder_name, builder_password_hash) values ($1, $2)',
-            [report.builderName, sha256(report.builderPassword)], callback);
</del><ins>+    function addSlave(report, callback) {
+        queryAndFetchAll('INSERT INTO build_slaves (slave_name, slave_password_hash) values ($1, $2)',
+            [report.slaveName, sha256(report.slavePassword)], callback);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    it(&quot;should reject error when builder name is missing&quot;, function () {
</del><ins>+    it(&quot;should reject error when slave name is missing&quot;, function () {
</ins><span class="cx">         postJSON('/api/report-commits/', {}, function (response) {
</span><span class="cx">             assert.equal(response.statusCode, 200);
</span><del>-            assert.equal(JSON.parse(response.responseText)['status'], 'MissingBuilderName');
</del><ins>+            assert.equal(JSON.parse(response.responseText)['status'], 'MissingSlaveName');
</ins><span class="cx">             notifyDone();
</span><span class="cx">         });
</span><span class="cx">     });
</span><span class="cx"> 
</span><del>-    it(&quot;should reject when there are no builders&quot;, function () {
</del><ins>+    it(&quot;should reject when there are no slaves&quot;, function () {
</ins><span class="cx">         postJSON('/api/report-commits/', emptyReport, function (response) {
</span><span class="cx">             assert.equal(response.statusCode, 200);
</span><span class="cx">             assert.notEqual(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     });
</span><span class="cx"> 
</span><span class="cx">     it(&quot;should accept an empty report&quot;, function () {
</span><del>-        addBuilder(emptyReport, function () {
</del><ins>+        addSlave(emptyReport, function () {
</ins><span class="cx">             postJSON('/api/report-commits/', emptyReport, function (response) {
</span><span class="cx">                 assert.equal(response.statusCode, 200);
</span><span class="cx">                 assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     });
</span><span class="cx"> 
</span><span class="cx">     it(&quot;should add a missing repository&quot;, function () {
</span><del>-        addBuilder(subversionCommit, function () {
</del><ins>+        addSlave(subversionCommit, function () {
</ins><span class="cx">             postJSON('/api/report-commits/', subversionCommit, function (response) {
</span><span class="cx">                 assert.equal(response.statusCode, 200);
</span><span class="cx">                 assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -100,8 +100,8 @@
</span><span class="cx">         });
</span><span class="cx">     });
</span><span class="cx"> 
</span><del>-    it(&quot;should store a commit from a valid builder&quot;, function () {
-        addBuilder(subversionCommit, function () {
</del><ins>+    it(&quot;should store a commit from a valid slave&quot;, function () {
+        addSlave(subversionCommit, function () {
</ins><span class="cx">             postJSON('/api/report-commits/', subversionCommit, function (response) {
</span><span class="cx">                 assert.equal(response.statusCode, 200);
</span><span class="cx">                 assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx">     });
</span><span class="cx"> 
</span><span class="cx">     it(&quot;should reject an invalid revision number&quot;, function () {
</span><del>-        addBuilder(subversionCommit, function () {
</del><ins>+        addSlave(subversionCommit, function () {
</ins><span class="cx">             subversionCommit
</span><span class="cx">             postJSON('/api/report-commits/', subversionInvalidCommit, function (response) {
</span><span class="cx">                 assert.equal(response.statusCode, 200);
</span><span class="lines">@@ -133,8 +133,8 @@
</span><span class="cx">         });
</span><span class="cx">     });
</span><span class="cx"> 
</span><del>-    it(&quot;should store two commits from a valid builder&quot;, function () {
-        addBuilder(subversionTwoCommits, function () {
</del><ins>+    it(&quot;should store two commits from a valid slave&quot;, function () {
+        addSlave(subversionTwoCommits, function () {
</ins><span class="cx">             postJSON('/api/report-commits/', subversionTwoCommits, function (response) {
</span><span class="cx">                 assert.equal(response.statusCode, 200);
</span><span class="cx">                 assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx">                 [repositoryId, reportedData['revision'], reportedData['time']], function (existingCommits) {
</span><span class="cx">                 var commitId = existingCommits[0]['commit_id'];
</span><span class="cx">                 assert.equal(existingCommits[0]['commit_message'], null);
</span><del>-                addBuilder(subversionCommit, function () {
</del><ins>+                addSlave(subversionCommit, function () {
</ins><span class="cx">                     postJSON('/api/report-commits/', subversionCommit, function (response) {
</span><span class="cx">                         assert.equal(response.statusCode, 200);
</span><span class="cx">                         assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx">                 reportedData = subversionTwoCommits.commits[0];
</span><span class="cx">                 queryAndFetchAll('INSERT INTO commits (commit_repository, commit_revision, commit_time) VALUES ($1, $2, $3) RETURNING *',
</span><span class="cx">                     [repositoryId, reportedData['revision'], reportedData['time']], function () {
</span><del>-                        addBuilder(subversionCommit, function () {
</del><ins>+                        addSlave(subversionCommit, function () {
</ins><span class="cx">                             postJSON('/api/report-commits/', subversionCommit, function (response) {
</span><span class="cx">                                 assert.equal(response.statusCode, 200);
</span><span class="cx">                                 assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span><span class="lines">@@ -218,7 +218,7 @@
</span><span class="cx">         queryAndFetchAll('INSERT INTO repositories (repository_id, repository_name) VALUES (1, \'WebKit\')', [], function () {
</span><span class="cx">             var author = subversionCommit.commits[0]['author'];
</span><span class="cx">             queryAndFetchAll('INSERT INTO committers (committer_repository, committer_account) VALUES (1, $1)', [author['account']], function () {
</span><del>-                addBuilder(subversionCommit, function () {
</del><ins>+                addSlave(subversionCommit, function () {
</ins><span class="cx">                     postJSON('/api/report-commits/', subversionCommit, function (response) {
</span><span class="cx">                         assert.equal(response.statusCode, 200);
</span><span class="cx">                         assert.equal(JSON.parse(response.responseText)['status'], 'OK');
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolspullsvnpy"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/pull-svn.py (178199 => 178200)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/pull-svn.py        2015-01-09 22:24:59 UTC (rev 178199)
+++ trunk/Websites/perf.webkit.org/tools/pull-svn.py        2015-01-09 22:25:31 UTC (rev 178200)
</span><span class="lines">@@ -12,13 +12,13 @@
</span><span class="cx"> 
</span><span class="cx"> def main(argv):
</span><span class="cx">     if len(argv) &lt; 7:
</span><del>-        sys.exit('Usage: pull-svn &lt;repository-name&gt; &lt;repository-URL&gt; &lt;dashboard-URL&gt; &lt;builder-name&gt; &lt;builder-password&gt; &lt;seconds-to-sleep&gt; [&lt;account-to-name-helper&gt;]')
</del><ins>+        sys.exit('Usage: pull-svn &lt;repository-name&gt; &lt;repository-URL&gt; &lt;dashboard-URL&gt; &lt;slave-name&gt; &lt;slave-password&gt; &lt;seconds-to-sleep&gt; [&lt;account-to-name-helper&gt;]')
</ins><span class="cx"> 
</span><span class="cx">     repository_name = argv[1]
</span><span class="cx">     repository_url = argv[2]
</span><span class="cx">     dashboard_url = argv[3]
</span><del>-    builder_name = argv[4]
-    builder_password = argv[5]
</del><ins>+    slave_name = argv[4]
+    slave_password = argv[5]
</ins><span class="cx">     seconds_to_sleep = float(argv[6])
</span><span class="cx">     account_to_name_helper = argv[7] if len(argv) &gt; 7 else None
</span><span class="cx"> 
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">         if not commit or len(pending_commits_to_send) &gt;= 10:
</span><span class="cx">             if pending_commits_to_send:
</span><span class="cx">                 print &quot;Submitting the above commits to %s...&quot; % dashboard_url
</span><del>-                submit_commits(pending_commits_to_send, dashboard_url, builder_name, builder_password)
</del><ins>+                submit_commits(pending_commits_to_send, dashboard_url, slave_name, slave_password)
</ins><span class="cx">                 print &quot;Successfully submitted.&quot;
</span><span class="cx">             pending_commits_to_send = []
</span><span class="cx">             time.sleep(seconds_to_sleep)
</span><span class="lines">@@ -136,11 +136,11 @@
</span><span class="cx">     return output.strip()
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-def submit_commits(commits, dashboard_url, builder_name, builder_password):
</del><ins>+def submit_commits(commits, dashboard_url, slave_name, slave_password):
</ins><span class="cx">     try:
</span><span class="cx">         payload = json.dumps({
</span><del>-            'builderName': builder_name,
-            'builderPassword': builder_password,
</del><ins>+            'slaveName': slave_name,
+            'slavePassword': slave_password,
</ins><span class="cx">             'commits': commits,
</span><span class="cx">         })
</span><span class="cx">         request = urllib2.Request(dashboard_url + '/api/report-commits')
</span></span></pre>
</div>
</div>

</body>
</html>