Giter Club home page Giter Club logo

locker's Introduction

»This project is unmaintained«

Singly has shifted development to Hallway, a multi-tenant, hosted version of the Locker. If you are interested in continuing the project, get in touch with the developers list.

Locker - the "me" platform Build Status

This is an open source project that helps me collect all of my personal data, from wherever it is, into one place, and then lets me do really awesome stuff with it.

Background Video

STATUS: Inactive.

We also have a mailing list setup. Join and say hello!

Getting Started

The Fast Way

Lockerbox (by pib) is a straightforward way to get all the high-level dependencies installed at once. It will make a single directory called lockerbox and get everything set up inside of there.

curl https://raw.github.com/LockerProject/lockerbox/master/lockerbox.sh > lockerbox.sh
chmod 0755 lockerbox.sh
./lockerbox.sh

When that successfully completes, add lockerbox/local/bin to your path:

echo 'export PATH=$PATH:'`pwd`/lockerbox/local/bin >> ~/.profile
source ~/.profile

Then:

cd lockerbox/Locker
make
./locker

now open http://localhost:8042/ in your browser!

The Detailed Way

If you encounter errors in "the fast way", or if you want to go through the process of setting everything up manually, check out the detailed set up instructions.

What are these things?

  • Connectors - A service that knows how to connect to and sync data with a place where I have data about myself, such as an account on a site or service, or in some desktop app, on my phone, or even from a device.
  • Collections - My data from the many different sources gets organized into common collections, such as places, contacts, messages, statuses, links, etc.
  • Apps - Once my data is in my locker I need apps that do useful or fun things for me, with the ability to control where my data goes and not have to give up access to my online accounts.

Once I "install" them in my locker (giving them some working space, a local port, and some config), I can browse to them where they provide their own instructions/steps (for now, it's early yet and pretty manual). To learn a bit more about the innards, I can install and run the Dev Docs app. :)

We need TONS of help and it's welcomed across the board, particularly in adding and advancing more of the connectors, just don a hard-hat and dig in, all patches welcomed, personal data FTW!

I am the platform.

locker's People

Contributors

anantn avatar bassdread avatar beaugunderson avatar bewest avatar cdent avatar ctide avatar dwaite avatar elsmorian avatar faulkner avatar feelepxyz avatar garyp avatar jamii avatar jaredhanson avatar jsmecham avatar koudelka avatar kristjan avatar kubes avatar maxschultz avatar mdz avatar msilvey avatar nym avatar othiym23 avatar quartzjer avatar rand avatar scsmncao avatar shoeheart avatar sjors avatar smurthas avatar tamersaadeh avatar tylerstalder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

locker's Issues

Cleanup http client module usage

For now we're settling on using the request module for http client actions. This will replace all straight http, https and wwwdude uses now. This should be done through core and all services that are maintained next to the core.

Any error in a connector will cause it to not reschedule itself

Losing internet connectivity, for example :

[22:15:11][Locker] Proxying a get to /friends to service /Me/foursquare/friends
[22:15:11][Locker] proxying GET /Me/foursquare/friends to http://localhost:18044//friends
[22:15:11][Locker] Proxy complete
[22:18:21][Foursquare Account][ERROR] { stack: [Getter/Setter],
arguments: undefined,
type: undefined,
message: 'ETIMEOUT, Timeout while contacting DNS servers',
errno: 12,
code: 'ETIMEOUT' }

Once an error happens, it will cease to pull down data for that source until the user hits the API endpoint again. In the case of an error in the connector, we should probably retry at some interval (maybe whatever interval the original job had been scheduled for?)

Simplify the locker core proxying

The proxy functions are mostly mirrored in the GET and POST handlers as well as the proxied() and proxiedPost(). Merge this up. Clean this up. Win.

Cannot find module 'connect/middleware/router'

i can't seem to get locker running i keep getting this error

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'connect/middleware/router'
at Function._resolveFilename (module.js:320:11)
at Function._load (module.js:266:25)
at require (module.js:348:19)
at Object. (/usr/local/lib/node/.npm/express/1.0.0/package/lib/express/server.js:17:14)
at Module._compile (module.js:404:26)
at Object..js (module.js:410:10)
at Module.load (module.js:336:31)
at Function._load (module.js:297:12)
at require (module.js:348:19)
at Object. (/usr/local/lib/node/.npm/express/1.0.0/package/lib/express/index.js:28:31)

I'm using Ubuntu 10.10

Please help!

Scheduler errors on invalid service IDs

[09:28:59][Locker][ERROR] Attemtping to spawn an unknown service 6d88880637edced8137c7d68e73fd329

When a service has been removed and there is still an entry in scheduler.json it errors and continues on. Might want to consider making this a silent error.

lockerd.js should be configured by a config.json file

lockerd.js should take a --config argument which a is path for a configuration JSON file, which includes at very least, lockerHost, lockerPort, and a scannedDirectory value. Eventually, a configurable Me directory.

Expand /diary GET to support days and possibly pagination.

Right now the GET to /diary only returns the current days events, which is correct for the basic call at all times. To take this a step further, we should support getting previous days diaries as well as pagination if a diary starts getting really long.

I see pagination probably changing the result from an array to an object that gives the line count of the first line, the max line count and the array of lines.

GitHub and Twitter contact events are not handled properly by contacts collection

The contacts collection needs to handle events slightly differently for github and twitter as they a require an indication of whether the contact is a follower or friend. Currently, it throws an error when processing either type of event:

TypeError: Object #<Object> has no method 'substring'
    at /Users/Simon/dev/Locker/Collections/Contacts/dataStore.js:88:37
    at Object.<anonymous> (/Users/Simon/dev/Locker/Collections/Contacts/contacts.js:89:13)

RFC - Diary entries that note 0 activity

Some of the diary entries right now say something like "Synced 0 xyz". While this does denote the system did something it also just fills us up with a bunch of junk. Please add thoughts here.

Invalid argument to getAgent

[20:55:07][Developer Documentation][ERROR] The process did not return valid startup information. TypeError: Invalid argument to getAgent

Change 'git co' to 'git checkout'

In a default git install on Ubuntu, git co is not a valid command. So the README.md should say 'git checkout dev' instead of 'git co dev'

Startup fails when mongod has a stale lock file

If node lockerd.js crashes or is killed and mongo leaves a stale lock file, subsequent startups will fail with with the following error:

[21:23:44][Locker] lservicemanager lockerPortNext = 18042
[21:23:44][Locker][ERROR] mongod did not start successfully.

/Users/Justin/Projects/Locker/Source/lockerd.js:128
    dashboard.instance.kill(dashboard.pid, "SIGINT");
                       ^
TypeError: Cannot call method 'kill' of undefined
    at shutdown (/Users/Justin/Projects/Locker/Source/lockerd.js:128:24)
    at ChildProcess.<anonymous> (/Users/Justin/Projects/Locker/Source/lockerd.js:61:13)
    at ChildProcess.emit (events.js:67:17)
    at ChildProcess.onexit (child_process.js:192:12)

Adding debug output indicates that mongod has a stale lock file:

[21:27:37][Locker] ************** 
old lock file: /Users/Justin/Projects/Locker/Source/Me/mongodata/mongod.lock.  probably means unclean shutdown
recommend removing file and running --repair
see: http://dochub.mongodb.org/core/repair for more information
*************

lockerd should be aware of this possibility and provide the user with a more useful error message.

Crash on downloading plugin

From fresh install of commit 8d6a5de:

Run 'node locker.js'
Navigate to localhost:8042
Click services
Click chrome history
Click install
See:
Installed: {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector","id":"b54754d31a45abb7cfc983d19b7d7354","me":"/home/jamie/Locker/Me/b54754d31a45abb7cfc983d19b7d7354","uri":"http://localhost:8042/Me/b54754d31a45abb7cfc983d19b7d7354/"}
Navigate to localhost:8042 (to ensure the service is visible)
Click page link next to Chrome History
See:
great! do you need to install the plugin?
Click plugin link.
locker crashes.

Log:

jamie@jamie-aspire:~/Locker$ node locker.js
[01:19:21][Locker] Spawned dashboard pid: 7095
[01:19:21][Locker] locker running at http://localhost:8042/
[01:19:21][Locker] generating id private key
[01:19:22][Locker] generating id public key
[01:19:22][Locker] id keys loaded
[01:19:22][Locker] dashboard stdout: http://localhost:18042/

[01:19:28][Locker] proxying / to http://localhost:18042/
[01:19:29][Locker] proxying /date.js to http://localhost:18042/date.js
[01:19:29][Locker] proxying /util.js to http://localhost:18042/util.js
[01:19:30][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:19:30][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:20:10][Locker] proxying /post2install?id=0 to http://localhost:18042/post2install?id=0
[01:20:10][Locker] dashboard stdout: { output: [ 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\nec\r\n{"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}\r\n0\r\n\r\n' ],
outputEncodings: [ undefined ],
writable: true,
_last: true,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
_hasBody: true,
_trailer: '',
finished: true,
method: 'POST',
path: '/install',
_headers: { 'content-type': 'application/x-www-form-urlencoded' },
_headerNames: { 'content-type': 'Content-Type' },
_header: 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headerSent: true }

[01:20:10][Locker] /install
[01:20:10][Locker] installing {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}
[01:20:11][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:20:15][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:21:17][Locker] proxying / to http://localhost:18042/
[01:21:18][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:21:21][Locker] proxying / to http://localhost:18042/
[01:21:21][Locker] proxying /date.js to http://localhost:18042/date.js
[01:21:21][Locker] proxying /util.js to http://localhost:18042/util.js
[01:21:22][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:21:22][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:24:22][Chrome History] proxying /Me/c638801c4fb3759985c239f9da53c0c4/ to http://localhost:18043/
[01:24:23][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:25:00][Locker] proxying /Me/c638801c4fb3759985c239f9da53c0c4/plugin to http://localhost:18043/plugin
[01:25:00][Chrome History][ERROR] DEBUG: ./crxmake.sh 301c5b594e592d2bbb08a07226266fbc4fb3438c /home/jamie/Locker/Me/key

[01:25:00][Chrome History][ERROR] DEBUG: ./crxmake.sh 6f3f4940e8ace319dbaf49daef219f340139c887 /home/jamie/Locker/Me/key

[01:25:00][Chrome History][ERROR] DEBUG: Error:./crxmake.sh: 22: Bad substitution

[01:25:00][Chrome History][ERROR] DEBUG: Error:./crxmake.sh: 23: Bad substitution

[01:25:00][Chrome History][ERROR] DEBUG: Wrote 6f3f4940e8ace319dbaf49daef219f340139c887.crx

http.js:550
throw new Error("Can't render headers after they are sent to the client.")
^
Error: Can't render headers after they are sent to the client.
at ServerResponse._renderHeaders (http.js:550:11)
at ServerResponse.writeHead (http.js:783:20)
at Request. (/home/jamie/Locker/Ops/webservice.js:247:13)
at Request.emit (events.js:45:17)
at Request._respond (/usr/local/lib/node/.npm/wwwdude/0.0.5/package/lib/wwwdude.js:219:36)
at Request._handleResponse (/usr/local/lib/node/.npm/wwwdude/0.0.5/package/lib/wwwdude.js:125:12)
at IncomingMessage. (/usr/local/lib/node/.npm/wwwdude/0.0.5/package/lib/wwwdude.js:157:14)
at IncomingMessage.emit (events.js:59:20)
at HTTPParser.onMessageComplete (http.js:111:23)
at Client.onData as ondata

No response when navigating to Facebook Account page

From fresh install of commit 8d6a5de:

Run 'node locker.js'
Navigate to localhost:8042
Click services
Click facebook account
Click install
See:
Installed: {"title":"Facebook Account","action":"Connect to a Facebook account","desc":"Collect and sync my (open graph) data from my Facebook account using Facebook Connect and a Facebook 'app' that I create just for myself.","run":"node client.js","provides":["contact/facebook","status/facebook"],"srcdir":"Connectors/Facebook","is":"connector","id":"07f90329de90ab99d8ecae6dc6d107b2","me":"/home/jamie/Locker/Me/07f90329de90ab99d8ecae6dc6d107b2","uri":"http://localhost:8042/Me/07f90329de90ab99d8ecae6dc6d107b2/"}
Navigate to localhost:8042
Click services
Click on page link next to Facebook Account
Loading icon spins but page does not load
Chrome developer toolbar says request is waiting for reponse.

Log:
jamie@jamie-aspire:$ !git
git clone https://github.com/quartzjer/Locker.git
Initialized empty Git repository in /home/jamie/Locker/.git/
cd Lockerremote: Counting objects: 1267, done.
remote: Compressing objects: 100% (759/759), done.
remote: Total 1267 (delta 657), reused 880 (delta 426)
Receiving objects: 100% (1267/1267), 538.42 KiB | 146 KiB/s, done.
Resolving deltas: 100% (657/657), done.
jamie@jamie-aspire:
$ cd Locker
jamie@jamie-aspire:/Locker$ sudo npm install
[sudo] password for jamie:
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm info calculating sha1 /usr/local/lib/node/.npm/.cache/locker/0.0.0/package.tgz
npm info shasum 444696057c6f7b92b58d15608d406189a35d1dab
npm info preinstall [email protected]
npm info install [email protected]
npm info postinstall [email protected]
npm info predeactivate [email protected]
npm info deactivate [email protected]
npm info postdeactivate [email protected]
npm info preactivate [email protected]
npm info activate [email protected]
npm info postactivate [email protected]
npm info build Success: [email protected]
npm ok
jamie@jamie-aspire:
/Locker$ node locker.js
[01:44:27][Locker] Spawned dashboard pid: 7302
[01:44:27][Locker] locker running at http://localhost:8042/
[01:44:27][Locker] generating id private key
[01:44:27][Locker] generating id public key
[01:44:27][Locker] id keys loaded
[01:44:27][Locker] dashboard stdout: http://localhost:18042/

[01:44:34][Locker] proxying / to http://localhost:18042/
[01:44:35][Locker] proxying /date.js to http://localhost:18042/date.js
[01:44:35][Locker] proxying /util.js to http://localhost:18042/util.js
[01:44:37][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:44:37][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:44:50][Locker] proxying /post2install?id=5 to http://localhost:18042/post2install?id=5
[01:44:50][Locker] dashboard stdout: { output: [ 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n151\r\n{"title":"Facebook Account","action":"Connect to a Facebook account","desc":"Collect and sync my (open graph) data from my Facebook account using Facebook Connect and a Facebook 'app' that I create just for myself.","run":"node client.js","provides":["contact/facebook","status/facebook"],"srcdir":"Connectors/Facebook","is":"connector"}\r\n0\r\n\r\n' ],
outputEncodings: [ undefined ],
writable: true,
_last: true,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
_hasBody: true,
_trailer: '',
finished: true,
method: 'POST',
path: '/install',
_headers: { 'content-type': 'application/x-www-form-urlencoded' },
_headerNames: { 'content-type': 'Content-Type' },
_header: 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headerSent: true }

[01:44:50][Locker] /install
[01:44:50][Locker] installing {"title":"Facebook Account","action":"Connect to a Facebook account","desc":"Collect and sync my (open graph) data from my Facebook account using Facebook Connect and a Facebook 'app' that I create just for myself.","run":"node client.js","provides":["contact/facebook","status/facebook"],"srcdir":"Connectors/Facebook","is":"connector"}
[01:45:05][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:46:31][Locker] proxying / to http://localhost:18042/
[01:46:31][Locker] proxying /date.js to http://localhost:18042/date.js
[01:46:31][Locker] proxying /util.js to http://localhost:18042/util.js
[01:46:32][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:46:33][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:46:36][Facebook Account][ERROR]

[01:46:36][Facebook Account][ERROR] node.js:116

[01:46:36][Facebook Account][ERROR] throw e; // process.nextTick error, or 'error' event on first tick

[01:46:36][Facebook Account][ERROR] ^

[01:46:36][Facebook Account][ERROR] Error: Cannot find module 'request'
at Function._resolveFilename (module.js:299:11)
at Function._load (module.js:245:25)
at require (module.js:327:19)
at Object. (/home/jamie/Locker/Common/node/locker.js:2:15)
at Module._compile (module.js:383:26)
at Object..js (module.js:389:10)
at Module.load (module.js:315:31)
at Function._load (module.js:276:12)
at require (module.js:327:19)
at Object. (/home/jamie/Locker/Connectors/Facebook/client.js:17:14)

Mongodata error should be cleaned up

Clean up this error that everyone sees:

[12:09:28][Locker] Me/mongodata does not appear to be a service (Error: ENOENT, No such file or directory
'Me/mongodata/me.json')

Twitter Connector - crashes on /getNew/friends

dev branch

[09:39:41][Locker] Proxying a get to /getNew/friends to service /Me/twitter/getNew/friends
[09:39:41][Locker] proxying GET /Me/twitter/getNew/friends to http://localhost:18043//getNew/friends
[09:39:41][Locker] Proxy complete
[09:39:48][Twitter Account][ERROR]
/Users/temas/singly/code/Locker/node_modules/request/main.js:189
if (!options.httpModule) throw new Error("Invalid protocol");
^

[09:39:48][Twitter Account][ERROR] Error: Invalid protocol
at [object Object].request (/Users/temas/singly/code/Locker/node_modules/request/main.js:189:34)
at request (/Users/temas/singly/code/Locker/node_modules/request/main.js:315:5)
at Function.post (/Users/temas/singly/code/Locker/node_modules/request/main.js:343:10)
at Object.event (/Users/temas/singly/code/Locker/Common/node/locker.js:74:13)
at EventEmitter. (/Users/temas/singly/code/Locker/Connectors/Twitter/sync-api.js:116:16)
at EventEmitter.emit (events.js:64:17)
at /Users/temas/singly/code/Locker/Connectors/Twitter/sync.js:189:30
at /Users/temas/singly/code/Locker/node_modules/mongodb/lib/mongodb/collection.js:348:9
at [object Object]. (/Users/temas/singly/code/Locker/node_modules/mongodb/lib/mongodb/db.js:335:5)
at [object Object].emit (events.js:67:17)

[09:39:48][Locker] twitter process has ended.

TypeError: Invalid argument to getAgent

TypeError: Invalid argument to getAgent
at Object.getAgent (http.js:1446:11)
at _getAgent (/opt/quartzjer-Locker-00632d2/node_modules/http-proxy/lib/node-http-proxy.js:48:30)
at [object Object].proxyRequest (/opt/quartzjer-Locker-00632d2/node_modules/http-proxy/lib/node-http-proxy.js:377:12)
at proxied (/opt/quartzjer-Locker-00632d2/Ops/webservice.js:336:11)
at Object. (/opt/quartzjer-Locker-00632d2/Ops/webservice.js:329:5)
at param (/opt/quartzjer-Locker-00632d2/node_modules/connect/lib/middleware/router.js:147:21)
at pass (/opt/quartzjer-Locker-00632d2/node_modules/connect/lib/middleware/router.js:163:10)
at Object.router as handle
at next (/opt/quartzjer-Locker-00632d2/node_modules/connect/lib/http.js:204:15)
at Object.handle (/opt/quartzjer-Locker-00632d2/Ops/webservice.js:39:21)

Whenever I used to connect using url http://localhost:8042 above error cames. So please help me out.
Thank you.......

unable to install chrome plugin

I'm using ubuntu natty 11.04 with package google-chrome-dev

The plugin locker-browser-history.crx downloads fine and show in folder

Drop onto chrome to install
click "Are you sure you want to continue"
I get a popup in chrome with the error

Extension Installation Error
Package is invalid: 
'CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE'.

Merged Contacts Viewer page not marked UTF-8

The contacts page contained UTF-8 data but initially displayed incorrectly as ISO-8859-1 until I manually changed encoding from the browser menu. The page needs to have an HTTP header (e.g. Content-Type: text/html; charset=UTF-8) or META tag to specify UTF-8.

Facebook API should show the downloading progress

When first initializing the Locker Application with Facebook and finally reach http://localhost:8042/<some_random_string>/friends, it loads an empty page and the terminal shows nothing. Users might think that the application either has crashed or does not actually work; simply useless. However, it actually does work, just not in an obvious way and it keep downloading all the images and other Facebook data in the background.

I suggest that the application implements some sort of progress bar or a method of showing downloaded data as it gets downloaded asynchronously. This way the user will be able to test the API and use the application, while the data is being downloaded.

Twitter - update existing friends link breaks

[09:54:04][Twitter Account][ERROR] 
/Users/temas/singly/code/Locker/Connectors/Twitter/sync.js:206
                    var eventObj = {source:type, type:'update', data:person};
                    ^

[09:54:04][Twitter Account][ERROR] ReferenceError: person is not defined
    at /Users/temas/singly/code/Locker/Connectors/Twitter/sync.js:206:21
    at Statement.<anonymous> (/Users/temas/singly/code/Locker/node_modules/sqlite/sqlite.js:130:11)

Repeatable every time I try and do it.

Multiple accounts on same service?

I have multiple accounts on services like Twitter and Facebook. Is it possible to aggregate multiple accounts from the same service (Connector) within the same instance of Locker?

Services do not spawn when called through the proxy

With commit ac67a50

Install a service (tested with XMPP and IMAP)
Navigate to the service page via dashboard
The front page shows up
Restart node
Navigate to the service page via dashboard
Node says 'Having to spawn ...'
Front page does not load
No python processes are running
The front page does not load

Connectors web does not need to hang on sync functions

When a sync operation is being performed, the web interface should not appear hung and waiting for it to complete. Rather it should be queued as a job internally and let the user have their web interface back. Progress or other views of current jobs could be shown on / or in some other manner.

Wrong service installed

From fresh install of commit 8d6a5de:

Run 'node locker.js'
Navigate to localhost:8042
Click services
Click developer docs
Click install
See:
Installed: {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector","id":"b54754d31a45abb7cfc983d19b7d7354","me":"/home/jamie/Locker/Me/b54754d31a45abb7cfc983d19b7d7354","uri":"http://localhost:8042/Me/b54754d31a45abb7cfc983d19b7d7354/"}

Log:

jamie@jamie-aspire:~/Locker$ node locker.js
[01:14:47][Locker] Spawned dashboard pid: 7034
[01:14:47][Locker] locker running at http://localhost:8042/
[01:14:47][Locker] id keys loaded
[01:14:48][Locker] dashboard stdout: http://localhost:18042/

[01:15:04][Locker] proxying / to http://localhost:18042/
[01:15:05][Locker] proxying /date.js to http://localhost:18042/date.js
[01:15:05][Locker] proxying /util.js to http://localhost:18042/util.js
[01:15:06][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:15:06][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:15:10][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:15:15][Locker] proxying /post2install?id=0 to http://localhost:18042/post2install?id=0
[01:15:15][Locker] dashboard stdout: { output: [ 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\nec\r\n{"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}\r\n0\r\n\r\n' ],
outputEncodings: [ undefined ],
writable: true,
_last: true,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
_hasBody: true,
_trailer: '',
finished: true,
method: 'POST',
path: '/install',
_headers: { 'content-type': 'application/x-www-form-urlencoded' },
_headerNames: { 'content-type': 'Content-Type' },
_header: 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headerSent: true }

[01:15:15][Locker] /install
[01:15:15][Locker] installing {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}
[01:15:22][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
^C
[01:16:19][Locker] Shutdown complete.

Twitter not working in iframe

twitter doesn't seem to allow you to setup the auth parts when it is running inside an iframe. We need to pop that out somehow to allow it to complete.

Add explicit mongo path to config

josephboyle ‣ Looks like the same one nym mentioned May 28 12:06 https://gist.github.com/997405 June 1 10:32
temas ‣ mongod is in path? 10:36
josephboyle ‣ mongod not in path - do you set this in shell environment or supposed to be somewhere in startup scripts? 10:39
temas ‣ josephboyle: shell right now, file a ticket to add the explicit path to config

Error while installing GoogleContacts

TypeError: Cannot read property 'available' of undefined
at Object. (/Users/temas/singly/code/Locker/Ops/Dashboard/dashboard-client.js:70:17)
at nextMiddleware (/Users/temas/singly/code/Locker/node_modules/express/lib/router/index.js:139:34)
at param (/Users/temas/singly/code/Locker/node_modules/express/lib/router/index.js:147:16)
at pass (/Users/temas/singly/code/Locker/node_modules/express/lib/router/index.js:155:10)
at Object.router as handle
at next (/Users/temas/singly/code/Locker/node_modules/express/node_modules/connect/lib/http.js:204:15)
at /Users/temas/singly/code/Locker/node_modules/connect/lib/middleware/session.js:296:9
at /Users/temas/singly/code/Locker/node_modules/connect/lib/middleware/session.js:311:9
at Array.0 (/Users/temas/singly/code/Locker/node_modules/connect/lib/middleware/session/memory.js:57:7)
at EventEmitter._tickCallback (node.js:126:26)

Add support for Static Apps

Add a flag in the manifest that allows for apps to run just as static, allowing read only access to:

index.html
static/js/
static/css/
static/img/

This would allow frontend only developers to do quick apps that communicate with the collections solely via ajax, since not every app needs a server in order to be useful.

Services not viewable after install

From fresh install of commit 8d6a5de:

Run 'node locker.js'
Navigate to localhost:8042
Click services
Click chrome history
Click install
See:
Installed: {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector","id":"b54754d31a45abb7cfc983d19b7d7354","me":"/home/jamie/Locker/Me/b54754d31a45abb7cfc983d19b7d7354","uri":"http://localhost:8042/Me/b54754d31a45abb7cfc983d19b7d7354/"}
Hit back (to localhost:8042/#)
No services visible, even after refresh

Log:
jamie@jamie-aspire:$ git clone https://github.com/quartzjer/Locker.git
Initialized empty Git repository in /home/jamie/Locker/.git/
remote: Counting objects: 1267, done.
remote: Compressing objects: 100% (759/759), done.
remote: Total 1267 (delta 657), reused 880 (delta 426)
Receiving objects: 100% (1267/1267), 538.42 KiB | 252 KiB/s, done.
Resolving deltas: 100% (657/657), done.
jamie@jamie-aspire:
$ cd Locker/
jamie@jamie-aspire:/Locker$ sudo npm install
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm info calculating sha1 /usr/local/lib/node/.npm/.cache/locker/0.0.0/package.tgz
npm info shasum aee2476381f7c887eafb63ffccdd0a52e2a313fb
npm info preinstall [email protected]
npm info install [email protected]
npm info postinstall [email protected]
npm info predeactivate [email protected]
npm info deactivate [email protected]
npm info postdeactivate [email protected]
npm info preactivate [email protected]
npm info activate [email protected]
npm info postactivate [email protected]
npm info build Success: [email protected]
npm ok
jamie@jamie-aspire:
/Locker$ node locker.js
[01:19:21][Locker] Spawned dashboard pid: 7095
[01:19:21][Locker] locker running at http://localhost:8042/
[01:19:21][Locker] generating id private key
[01:19:22][Locker] generating id public key
[01:19:22][Locker] id keys loaded
[01:19:22][Locker] dashboard stdout: http://localhost:18042/

[01:19:28][Locker] proxying / to http://localhost:18042/
[01:19:29][Locker] proxying /date.js to http://localhost:18042/date.js
[01:19:29][Locker] proxying /util.js to http://localhost:18042/util.js
[01:19:30][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:19:30][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:20:10][Locker] proxying /post2install?id=0 to http://localhost:18042/post2install?id=0
[01:20:10][Locker] dashboard stdout: { output: [ 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\nec\r\n{"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}\r\n0\r\n\r\n' ],
outputEncodings: [ undefined ],
writable: true,
_last: true,
chunkedEncoding: true,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
_hasBody: true,
_trailer: '',
finished: true,
method: 'POST',
path: '/install',
_headers: { 'content-type': 'application/x-www-form-urlencoded' },
_headerNames: { 'content-type': 'Content-Type' },
_header: 'POST /install HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n',
_headerSent: true }

[01:20:10][Locker] /install
[01:20:10][Locker] installing {"title":"Chrome History","action":"Sync your browser history from Chrome","desc":"Collect and sync my browser history from Chrome.","run":"node client.js","provides":["link/chrome"],"srcdir":"Connectors/ChromeHistory","is":"connector"}
[01:20:11][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:20:15][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:21:17][Locker] proxying / to http://localhost:18042/
[01:21:18][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico
[01:21:21][Locker] proxying / to http://localhost:18042/
[01:21:21][Locker] proxying /date.js to http://localhost:18042/date.js
[01:21:21][Locker] proxying /util.js to http://localhost:18042/util.js
[01:21:22][Locker][ERROR] Error sending diary: Error: ENOENT, No such file or directory 'Me/diary/2011/2/31.json'
[01:21:22][Locker] proxying /favicon.ico to http://localhost:18042/favicon.ico

Collections should always listen for events

Since collections are always installed, they should always be listening for events, even if they have never been accessed by the locker owner in the current session or a previous one. Perhaps is could simply be specified in the manifest file.

Diary entries need to be more legible

Diary entries are intended to be read by a normal user and reasonably understood. Most of them are close, but at the same time rather confusing about what they are doing. Need a sweep over them then note any exceptions or specific issues.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.