Code Monkey home page Code Monkey logo

dcube's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dcube's Issues

Capability to get, delete, and update a data entity.

Databases my be setup with a users access list, or may be open to all users.

Databases with an access list need to be able to limit access to get, delete, and update functionality to users on the list.

Entities will simply be data blobs that are explicitly indexed by the index terms provided by the client.

Create a "groups levels" config interpreter and config file

Each group has a level number associated with it which is used to restrict the ability of users to edit other user accounts.

For example, if the level for the databases group is 30 and the level of the admin group is 50, then members of the admin group may edit members of the databases group, but the reciprocal is not true.

This should be implemented in the combination of the 'gate' and 'factory' modules.

testrunner feedback when server is not found.

When running testrunner.py on the remote server, if the version number cannot be found we get a nasty looking error message:
Traceback (most recent call last):
File "./testrunner.py", line 161, in
main()
File "./testrunner.py", line 119, in main
temp_test_admin, passkey = authenticate(host)
File "./testrunner.py", line 79, in authenticate
auth, username_, nonce, nextnonce = make_auth_request(host, username)
File "./testrunner.py", line 47, in make_auth_request
'Unexpected HTTP status code (%d) on login.'% response.status
AssertionError: Unexpected HTTP status code (404) on login.

The problem seems to come from here:
http://github.com/kixxauth/DCube/blob/master/test/testrunner.py#L46

Maybe we can default to the latest running default version instead of using the version in app.yaml if it does not exist?

Return entities for qeury results like those for get results.

If a 'get' query is made the results look like this:
self.assertEqual(ent1['action'], 'get')
self.assertEqual(ent1['status'], 200)
self.assertEqual(ent1['key'], 'foo@1')
self.assertEqual(ent1['entity'], '1')
self.assertEqual(ent1['indexes'], {'idx':'one','class':'$trings'})

When the same entity is returned in a query, it looks like this:
r3 = {
'class':'$trings', 'key':'foo@1',
'entity':'1', 'idx':'one'
}

The first way (the 'get' way) is better.

Unauthenticated 'get' request to /users/ should return 401

Currently any DCube 'get' call to a /users/ url returns limited use data with a 200 response code. This seems inconsistent and should be changed to a 401 response code for unauthenticated requests and a 200 only for the authenticated requests.

Return credentials for 404 and 501 status codes.

Currently when a response is sent with a 404 or 501 (and maybe others?) DCube status code, it is not sent with credential challenges (nonce, nextnonce in {"head": {"authorization"}}).

This seems to be inconsistent with the DCube protocol of always performing a CHAP authentication whenever possible.

create "user-admin", "account-admin", and, "database-admin" users

These users can be created by the "sys-admin", "user-admin", and "account-admin" users.

The case where each of these operations would be denied can be added to the automated testing suite.

Thoroughly testing these operations will take some additional trickery and is a separate issue.

Capability for user to join a database

The database-admin can declare if a database is open or restricted. If it is restricted, then users must be invited by the database-admin, or must request to join and be given permission by the database admin.

Privleged capability to manage database access lists

There are 3 access lists:
owner: level 100
manager: level 90
user: level 80

Members of the owner ACL may manage the owner, manager, and user ACL.
Members of the manager ACL may manage the the user ACL only
Members of the user ACL are not able to update any other ACL

Run tests of all levels of users against all levels of ACL

Implement a user management structure.

Building on the idea of the permission system in Unix file systems, I'd like to see a user management system for this DCube host that implements a tiered structure of user accounts.

The root user would be anyone with admin access to the Google App Engine account. The next layer would be the system admins with access to just about all of the data that the implementers choose to expose to them through the code. After that would be user managers that could create new data realms and change user permissions.

Basically each layer added would have less and less privileges and the domain of access given to each layer would be determined by the user groups they are a member of.

Group permission system.

To help control user management and data security issues I think we need to abstract out a logical layer or module of the program to handle access to data in a similar way to the way Unix systems handle access to disk drives. While it is not like that high level Python code will be able to enforce anything, by abstracting data access out into access control module(s) we should be able to prevent the coding mud pie that will lead to problems with leaking stuff we don't want to leak.

Create a type system.

I'm trying to move the structure of this program towards the functional programming paradigm, but to do this I need to implement a solid data type system within the program.

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.