From 518903566f6d283bd97a2214927e6364b9e18e9c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Thu, 25 Oct 2012 10:01:36 -0400 Subject: [PATCH] added ability for basic autorithation on github --- lib/client/storage/_github.js | 62 + lib/client/storage/github/LICENSE | 25 + lib/client/storage/github/README.md | 272 ++++ lib/client/storage/github/github.js | 464 +++++++ lib/client/storage/github/lib/base64.js | 82 ++ .../storage/github/lib/underscore-min.js | 31 + lib/client/storage/github/lib/underscore.js | 1189 +++++++++++++++++ 7 files changed, 2125 insertions(+) create mode 100644 lib/client/storage/_github.js create mode 100644 lib/client/storage/github/LICENSE create mode 100644 lib/client/storage/github/README.md create mode 100644 lib/client/storage/github/github.js create mode 100644 lib/client/storage/github/lib/base64.js create mode 100644 lib/client/storage/github/lib/underscore-min.js create mode 100644 lib/client/storage/github/lib/underscore.js diff --git a/lib/client/storage/_github.js b/lib/client/storage/_github.js new file mode 100644 index 00000000..95079867 --- /dev/null +++ b/lib/client/storage/_github.js @@ -0,0 +1,62 @@ +var CloudCommander; + +var CloudCommander, Github; +/* object contains terminal jqconsole */ + +(function(){ + "use strict"; + + var cloudcmd = CloudCommander, + Util = cloudcmd.Util; + + cloudcmd.Storage = {}; + + var GithubStore = {}; + + /* PRIVATE FUNCTIONS */ + + /** + * function loads github.js + */ + function load(){ + console.time('github load'); + + var lDir = './lib/client/storage/github/'; + Util.anyLoadOnLoad([ + lDir + 'github.js', + lDir + 'lib/base64.js', + lDir + 'lib/underscore.js'], + + function(){ + console.timeEnd('github load'); + Util.Images.hideLoad(); + }); + } + + function callback(pError, pDate){ + if(pError) + console.log(pError); + + if(pDate) + console.log(pDate); + } + + GithubStore.login = function(pUser, pPasswd){ + cloudcmd.Storage.Github = new Github({ + username: pUser, + password: pPasswd, + auth : 'oauth' + }); + }; + /* PUBLICK FUNCTIONS */ + + /** + * function bind keys + */ + cloudcmd.Storage.Keys = function(){ + load(); + }; + + cloudcmd.Storage.Github = GithubStore; + +})(); \ No newline at end of file diff --git a/lib/client/storage/github/LICENSE b/lib/client/storage/github/LICENSE new file mode 100644 index 00000000..6f66ed81 --- /dev/null +++ b/lib/client/storage/github/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2012 Michael Aufreiter, Development Seed +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "Development Seed" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/lib/client/storage/github/README.md b/lib/client/storage/github/README.md new file mode 100644 index 00000000..9e832117 --- /dev/null +++ b/lib/client/storage/github/README.md @@ -0,0 +1,272 @@ +# Github.js + +Github.js provides a minimal higher-level wrapper around git's [plumbing commands](http://git-scm.com/book/en/Git-Internals-Plumbing-and-Porcelain), exposing an API for manipulating GitHub repositories on the file level. It is being developed in the context of [Prose](http://prose.io), a content editor for GitHub. + +## Usage + +Create a Github instance. + +```js +var github = new Github({ + username: "YOU_USER", + password: "YOUR_PASSWORD", + auth: "basic" +}); +``` + +Or if you prefer OAuth, it looks like this: + +```js +var github = new Github({ + token: "OAUTH_TOKEN" + auth: "oauth" +}); +``` + +## Repository API + + +```js +var repo = github.getRepo(username, reponame); +``` + +Show repository information + +```js +repo.show(function(err, repo) {}); +``` + +Get contents at a particular path. + +```js +repo.contents("path/to/dir", function(err, contents) {}); +``` + +Fork repository. This operation runs asynchronously. You may want to poll for `repo.contents` until the forked repo is ready. + +```js +repo.fork(function(err) {}); +``` + +Create Pull Request. + +```js +var pull = { + title: message, + body: "This pull request has been automatically generated by Prose.io.", + base: "gh-pages", + head: "michael" + ":" + "prose-patch", +}; +repo.createPullRequest(pull, function(err, pullRequest) {}); +``` + + +Retrieve all available branches (aka heads) of a repository. + +```js +repo.listBranches(function(err, branches) {}); +``` + +Store contents at a certain path, where files that don't yet exist are created on the fly. + +```js +repo.write('master', 'path/to/file', 'YOUR_NEW_CONTENTS', 'YOUR_COMMIT_MESSAGE', function(err) {}); +``` + +Not only can you can write files, you can of course read them. + +```js +repo.read('master', 'path/to/file', function(err, data) {}); +``` + +Move a file from A to B. + +```js +repo.move('master', 'path/to/file', 'path/to/new_file', function(err) {}); +``` + +Remove a file. + +```js +repo.remove('master', 'path/to/file', function(err) {}); +``` + +Exploring files of a repository is easy too by accessing the top level tree object. + +```js +repo.getTree('master', function(err, tree) {}); +``` + +If you want to access all blobs and trees recursively, you can add `?recursive=true`. + +```js +repo.getTree('master?recursive=true', function(err, tree) {}); +``` + +Given a filepath, retrieve the reference blob or tree sha. + +```js +repo.getSha('master', '/path/to/file', function(err, sha) {}); +``` + +For a given reference, get the corresponding commit sha. + +```js +repo.getRef('heads/master', function(err, sha) {}); +``` + +Create a new reference. + +```js +var refSpec = { + "ref": "refs/heads/my-new-branch-name", + "sha": "827efc6d56897b048c772eb4087f854f46256132" +}; +repo.createRef(refSpec, function(err) {}); +``` + +Delete a reference. + +```js +repo.deleteRef('heads/gh-pages', function(err) {}); +``` + + +## User API + + +```js +var user = github.getUser(); +``` + +List all repositories of the authenticated user. + +```js +user.repos(username, function(err, repos) {}); +``` + +List organizations the autenticated user belongs to. + +```js +user.orgs(function(err, orgs) {}); +``` + +List authenticated user's gists. + +```js +user.gists(username, function(err, gists) {}); +``` + +Show user information for a particular username. Also works for organizations. + +```js +user.show(username, function(err, user) {}); +``` + +List public repositories for a particular user. + +```js +user.userRepos(username, function(err, repos) {}); +``` + +List repositories for a particular organization. Includes private repositories if you are authorized. + +```js +user.orgRepos(orgname, function(err, repos) {}); +``` + +List all gists of a particular user. If username is ommitted gists of the current authenticated user are returned. + +```js +user.userGists(username, function(err, gists) {}); +``` + +## Gist API + +```js +var gist = github.getGist(3165654); +``` + +Read the contents of a Gist. + +```js +gist.read(function(err, gist) { + +}); +``` + +Updating the contents of a Git. Please consult the documentation on [GitHub](http://developer.github.com/v3/gists/). + +```js +var delta = { + "description": "the description for this gist", + "files": { + "file1.txt": { + "content": "updated file contents" + }, + "old_name.txt": { + "filename": "new_name.txt", + "content": "modified contents" + }, + "new_file.txt": { + "content": "a new file" + }, + "delete_this_file.txt": null + } +}; + +gist.update(delta, function(err, gist) { + +}); +``` + + +## Tests + +Github.js is automatically™ tested by the users of [Prose](http://prose.io). Because of that, we decided to save some time by not maintaining a test suite. Yes, you heard right. :) However, you can still consider it stable since it is used in production. + +##Setup + +Github.js has the following dependencies: + +- Underscore +- Base64 (for basic auth). You can leave this if you are not using basic auth. + +Include these before github.js : + +``` +