{ "info": { "author": "Ethan Jucovy", "author_email": "opencore-dev@lists.coactivate.org", "bugtrack_url": null, "classifiers": [], "description": "A small library of functions useful for integration with opencore.\n\nContents:\n\nlibopencore.auth\n================\n\n * get_secret(filename)\n\n Get a shared secret to be used in cookie parsing & construction.\n\n * generate_cookie_value(username, shared_secret)\n \n Use this to set a cookie so that opencore will recognize the user\n as logged in.\n\n * authenticate_from_cookie(cookie_string, shared_secret)\n\n Returns (username, hash) for the user identified by the cookie.\n Throws a BadCookie exception if the cookie is malformed, or a\n NotAuthenticated exception if the cookie is well-formed but not\n using the correct shared secret.\n\nlibopencore.deliverance_middleware\n==================================\n\n * filter_factory / CustomDeliveranceMiddleware\n\n A subclass of Deliverance middleware (v0.3) that carries along\n the original request's HTTP_X_OPENPLANS_* headers and cookie,\n when making external subrequests. This allows external applications\n to properly respect login and context information.\n\n It also hard-codes the necessary Deliverance ruleset, and theme uri.\n\n The theme is served by opencore itself, at a @@theme.html view registered\n on the portal. Here, it is fetched by making an external request to the\n front of the OpenCore stack, to guarantee that links in the theme are\n correct.\n\nlibopencore.wsgi\n================\n\n * composite_factory / URLDispatcher\n\n A paste.composite_factory that will dispatch requests to\n opencore and to other applications (tasktracker and wordpress)\n based on the URL.\n\n It will add the necessary request headers before making\n subrequests.\n\nlibopencore.http_proxy\n======================\n\n * app_factory / RemoteProxy\n\n A paste.app_factory that will proxy requests to external HTTP\n calls. Pass a ``remote_uri`` with the base href for the app.\n\n If ``is_opencore`` is set, it will rewrite the request to tell\n Zope's VirtualHostMonster how links in the response should look.\n\n\n\nChanges\n=======\n\n0.7\n===\n\n* New module ``libopencore.import_utils``\n\n* New function ``parse_listen_settings`` in ``libopencore.import_utils``\n\n0.6\n===\n\n* Added new configuration variable ``site_root`` in http_proxy app,\n for proxying to an opencore (zope) backend. The default value\n is ``/openplans/``. If you are proxying to an opencore backend\n where the plone site root is installed elsewhere, or if you are\n using a ++skin++ layer for customizations, you can set this to a\n different value.\n\n This should be used instead of setting ``remote_uri`` to a value\n like ``http://localhost:10001/++skin++avata/``. Instead of\n\n remote_uri = http://localhost:10001/++skin++avata/\n\n you should use\n\n remote_uri = http://localhost:10001\n site_root = /++skin++avata/openplans/\n\n to ensure proper url generation.\n\n* Added X-Forwarded-Server to the set of preserved headers in \n Deliverance subrequests.\n\n\n\n0.5\n===\n\nFeatures added\n--------------\n\n* The http proxy's load-balancer is now capable of sending robots \n to a specific backend.\n\n To use it for a given backend, pass in a URL for ``robots_uri``\n and this URL will be chosen if the request's User-Agent string\n matches a set of known robots.\n\n To segregate robots from all other users, this URL could be\n omitted from the ``remote_uri`` parameter.\n\n* The deliverance.xml rules now try to fetch ``/openplans/xinha-config``\n if there is a ``
`` present in the page.\n This is used to apply a consistent Xinha editor to Wordpress pages.\n For more details and context see: http://www.coactivate.org/projects/opencore/lists/opencore-dev/archive/2010/09/1283636838104/forum_view\n\nBugs Fixed\n----------\n\n* URLs to the root of a non-Zope opencore component must have a\n trailing slash; if they don't, a permanent redirect is issued\n to the correct URL. (So /projects/foo/blog -> /projects/foo/blog/)\n The specific symptom I noticed was the link to \"Write a new post\"\n on the front page of a project's blog (when logged in as a project\n admin, when no posts have been made yet) was incorrectly missing the\n /blog/ component of the URL. This behavior previously existed \n somewhere in DeliveranceVHoster.\n\n* Responses to Ajax requests (X-Requested-With: XMLHttpRequest) are\n not themed by Deliverance even if they have Content-Type: text/html.\n This fixes the behavior of TaskTracker's Ajax requests to post new\n comments on a task.\n\n* The deliverance.xml rules no longer try to fetch ``/openplans/oc-footer``\n or ``/openplans/oc-header``; these have been unused for ages, so there's\n no need to make the extra subrequests to Zope.\n\n* The composite WSGI application in wsgi.py now adds the request header\n ``X-Openplans-Application: zope`` when directing a request to opencore.\n This behavior previously existed somewhere in DeliveranceVHoster.\n It fixes http://trac.socialplanning.org/opencore/ticket/2943\n\n \n0.4\n===\n\nAdded a simple random-choice load balancer to the http proxy.\n\nTo use it for a given backend, pass in a space-separated list \nof URLs as ``remote_uri`` instead of a single URL. Assuming you\nhave identical applications listening at each URL, proxied\nrequests will be distributed across those URLs.\n\n(The intended use is for multiple Zope instances talking to the\nsame ZEO server, though I guess it could also work for any of\nthe other applications if there was a reason.)\n\n0.3\n===\n\nBugs fixed\n----------\n\n* Work around a bug deeper in the stack which causes links in the\n response HTML like /foo/my.domain.com/bar/ to be rewritten as\n /foo/my.domain.com:80/bar/ if HTTP_HOST is my.domain.com:80\n\n* Previously some proxied WordPress URLs were incorrect and resulting\n in 404s. This is now fixed.\n\n\nFeatures added\n--------------\n\nAdded transcluder_middleware module and a ``libopencore#transcluder``\nentry point for a paste.filter_factory.\n\nIf using transcluder middleware, Transcluder must be installed.\n\nIf using transcluder middleware, it should be the outermost wsgi filter\nin your stack. This is because Transcluder sometimes makes internal WSGI\nsubrequests instead of HTTP calls, and calls its inner app. So if you\nhave routing, security or anything else important outside Transcluder,\nyou may get strange results.\n\nAdded support for proxying to a Twirlip server. Twirlip must be\nmounted on /notifications by a regular paste#urlmap (where / is then\nmapped to the main libopencore composite app) and it must be wrapped\nby transcluder middleware.\n\nTo use the Twirlip proxy, install libopencore's `twirlip` extra\nrequirements (listed in extras_require in setup.py).\n\nTo use the Twirlip proxy, use a libopencore#proxy app with the setting\n`is_twirlip=true` and a setting `topp_secret_filename` that points to\nthe absolute path of the shared secret used for authentication. Your\nTwirlip proxy will be wrapped in Eyvind middleware which converts\nREMOTE_USER into a special HTTP header signed with the shared secret,\nwhich is then decoded by the Twirlip server.\n\nTwirlip and Transcluder are currently used in an OpenCore stack to\nprovide subscription-based email notifications for wikipage edits and\nchanges to tasks. But don't try to use these unless you absolutely\nneed to -- I'm going to replace Twirlip with something simpler before\nlong.\n\n0.2\n===\n\nAdded deliverance_middleware, wsgi, and http_proxy modules.\n\nAdded a sample paste.ini file showing how to combine these into a frontend app\nthat proxies to opencore, tasktracker and wordpress, and themes the responses\nwith deliverance when necessary.\n\n0.1\n===\n\nInitial release. Added auth module.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "libopencore", "package_url": "https://pypi.org/project/libopencore/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/libopencore/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/libopencore/0.7.1/", "requires_dist": null, "requires_python": null, "summary": "a library of functions for connecting external apps to/from opencore", "version": "0.7.1" }, "last_serial": 794179, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "93e45b71b8d50eb4643477aac77129ab", "sha256": "cf41be41392d113d1f516a5e5f5031b14b0c73687f6b763c724ee6605e7b2c2a" }, "downloads": -1, "filename": "libopencore-0.1.tar.gz", "has_sig": false, "md5_digest": "93e45b71b8d50eb4643477aac77129ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2151, "upload_time": "2010-03-07T02:32:04", "url": "https://files.pythonhosted.org/packages/91/59/3933ffa6e1d6524d59f4265fbdc8ed797564fa91618ed785cd01c3f352a9/libopencore-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "9ec015b19fbfe890614f5d1b19576b2c", "sha256": "100f618bb498e69c586a56f0b076436cd6c5f44f3c7c1f48f9d3ffaed7f0d0ce" }, "downloads": -1, "filename": "libopencore-0.2.tar.gz", "has_sig": false, "md5_digest": "9ec015b19fbfe890614f5d1b19576b2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9082, "upload_time": "2010-03-10T21:57:04", "url": "https://files.pythonhosted.org/packages/51/af/9c35405260d42787116fbad6759e7647bc4f51c4052f0b997ff312d9a3b5/libopencore-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "aa33bcf37a84197ec42c06faebb40647", "sha256": "3894214dab62e092dd24a2b3be732aee283030d58543893d4aa0fd5884c3b2bd" }, "downloads": -1, "filename": "libopencore-0.3.tar.gz", "has_sig": false, "md5_digest": "aa33bcf37a84197ec42c06faebb40647", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14261, "upload_time": "2010-08-08T08:28:55", "url": "https://files.pythonhosted.org/packages/ed/53/4fea44f379fb81f333fdf5c2a3de9415cd1fcb0d15507cf6285c2a125c4b/libopencore-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "3cc6a83cb86b7371c2e719bfdc297d9d", "sha256": "4c83d5e42a6df939e9f3c0455e6e19b38e0b7cbd00e656363a39add0977b0e82" }, "downloads": -1, "filename": "libopencore-0.4.tar.gz", "has_sig": false, "md5_digest": "3cc6a83cb86b7371c2e719bfdc297d9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14891, "upload_time": "2010-08-13T17:12:58", "url": "https://files.pythonhosted.org/packages/58/e0/e4adb3b2f43e4dc4f72c4e087386d9429dee7b9f727f7a112d05ffd359b9/libopencore-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "788ccb5c40dd5a1e8599d1ad6b95cd88", "sha256": "9c0b480f9f4b509a5fd603cdfe4e16d7352a22b862057f0ea2b67dfb2c6e19a7" }, "downloads": -1, "filename": "libopencore-0.5.tar.gz", "has_sig": false, "md5_digest": "788ccb5c40dd5a1e8599d1ad6b95cd88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15966, "upload_time": "2010-12-22T15:25:00", "url": "https://files.pythonhosted.org/packages/5c/e9/78667c77d80abb0f04b8efb1ebb80efb5c70ceaaef9eb49453de429a244f/libopencore-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "df78c9ea2758b3568d2ea055f98ea4d1", "sha256": "4ebbf1f8a3a34856b579dcda06923424c957415b062533a883870938f2be7052" }, "downloads": -1, "filename": "libopencore-0.6.tar.gz", "has_sig": false, "md5_digest": "df78c9ea2758b3568d2ea055f98ea4d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16672, "upload_time": "2011-05-16T17:44:14", "url": "https://files.pythonhosted.org/packages/54/2c/18f5ff2181861fd2395837b018bd39bd60a1c6ef7c692c2260fe0030d93e/libopencore-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "0d7f3c54ac5e1cbe53099ea5aec27712", "sha256": "1b123f48d2d08a02d3f3b37ac0de5f0e4018a2da14a6e37d33066e26d279af62" }, "downloads": -1, "filename": "libopencore-0.7.tar.gz", "has_sig": false, "md5_digest": "0d7f3c54ac5e1cbe53099ea5aec27712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15247, "upload_time": "2012-03-21T17:04:54", "url": "https://files.pythonhosted.org/packages/7a/48/19687d9a2c0a52bc4487b9e443405a6f710b1090ac1ae06004aa0e535552/libopencore-0.7.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "9ca57cbedc3b20350b59e9f903c82fff", "sha256": "7c4c579680ce57a1a6bfa95923f80d7a48fe822bb7ce470adbd17c16d428df3f" }, "downloads": -1, "filename": "libopencore-0.7.1.tar.gz", "has_sig": false, "md5_digest": "9ca57cbedc3b20350b59e9f903c82fff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15245, "upload_time": "2012-03-21T17:16:21", "url": "https://files.pythonhosted.org/packages/e4/d2/450e96de2501e3c8d0d88cd93f42e6e27b2ebba96a3026ac9e93ce9e1b96/libopencore-0.7.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9ca57cbedc3b20350b59e9f903c82fff", "sha256": "7c4c579680ce57a1a6bfa95923f80d7a48fe822bb7ce470adbd17c16d428df3f" }, "downloads": -1, "filename": "libopencore-0.7.1.tar.gz", "has_sig": false, "md5_digest": "9ca57cbedc3b20350b59e9f903c82fff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15245, "upload_time": "2012-03-21T17:16:21", "url": "https://files.pythonhosted.org/packages/e4/d2/450e96de2501e3c8d0d88cd93f42e6e27b2ebba96a3026ac9e93ce9e1b96/libopencore-0.7.1.tar.gz" } ] }