{ "info": { "author": "Brian Kirkpatrick", "author_email": "code@tythos.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Internet :: WWW/HTTP" ], "description": "SDSU\n====\n\n*Skim milk. Gummy bears. Pure genius.*\n\n.. contents::\n\nQuick Start\n-----------\n\n.. code::\n\n > python -c \"import sdsu; sdsu.main()\"\n\nNote that, for Tornado-based servers, Windows users stop the service using\n*CRTL + PAUSE/BREAK*.\n\nOverview\n--------\n\nThe Secure, Dual-use Server Utility, or SDSU, provides:\n\n* A preconfigured, multi-handler, Tornado-based web server\n\n* Static file hosting from the */static* subdirectory\n\n* SSL encryption using the certificates stored in */security*\n\n* Login protection (including address whitelisting) from the credentials in\n */security*\n\n* Secure WebSocket exchange on the same port service as static file hosting,\n using the */wss* path.\n\nThe *sdsu.main()* method takes three parameters that allow users to customize\nthe configuration of a SDSU server before it launches: *securityRoot*,\n*staticRoot*, and *wssHandlerCls*.\n\nsecurityRoot\n------------\n\nBy default, the */security* subdirectory contains three files:\n\n* *certificate.pem* defines the server's SSL certificate\n\n* *credentials.csv* defines the user table. Each user is defined by an email\n address (\"email\"), password (\"password\"), and whitelist mask (CIDR-style,\n IPv6 preferred but IPv4 will be translated automatically with a \"2002:\"\n prefix.) Password and whitelist mask will be used by the\n *SplashHandler.post()* method when verifying credential submissions.\n\n* *key.pem* defines the server's private SSL key.\n\nUsers can customize security configurations by creating a new copy of this\ndirectory, modifying it's contents, and passing the new absolute path to\n*sdsu.main()* as the *securityRoot* parameter. For example, you are *strongly*\nencouraged to use your own certificates.\n\nstaticRoot\n----------\n\nThe */static* subdirectory contains static files that will be served to satisfy\nHTTP requests. Except for *splash.html*, all static files are protected by\nauthentication restrictions. Default contents of */static* include:\n\n* *index.css*, a stylesheet used by *index.html* and placed here to demonstrate\n and verify protection of static file contents.\n\n* *index.html*, the default landing page for authenticated users.\n\n* *splash.html*, which defines the login page for users that have not yet been\n authenticated. This also serves as a logout page, as upon accessing this\n resource any existing sessions are cleared.\n\nUsers can customize static file contents (and therefore the bulk of their web\napplications) by creating a new copy of this directory, modifying it's\ncontents, and passing the new absolute path to *sdsu.main()* as the\n*staticRoot* parameter.\n\nwssHandlerCls\n-------------\n\nThe class *sdsu.WssHandler* defines the default behavior for secure WebSocket\ninteraction mounted by the server to the path \"/wss\". Users can customize\nWebSocket behaviors by inheriting from this class, then pass the new child\nclass to *sdsu.main()* as the *wssHandlerCls* parameter. Typical usage will\noverride one or more of the following methods:\n\n* *on_open()*\n\n* *on_message()* (by default, simply echoes the message back to the client)\n\n* *on_close()*\n\nSee class method documentation for more details, including method signatures.\nKeep in mind that each instance of the WebSocker handler class is unique to\na specific client connection; state is not shared between clients.\n\nWebSocket Client\n----------------\n\nOnce a server is running, connection via WebSocket is trivial:\n\n.. code::\n\n > var wss = new WebSocket(\"wss://\" + window.location.host + \"/wss\");\n > wss.addEventListener(\"message\", console.log);\n > wss.send(\"0\");\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Tythos/sdsu", "keywords": "tornado static web server secure websocket", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "sdsu", "package_url": "https://pypi.org/project/sdsu/", "platform": "", "project_url": "https://pypi.org/project/sdsu/", "project_urls": { "Homepage": "https://github.com/Tythos/sdsu" }, "release_url": "https://pypi.org/project/sdsu/1.0.0/", "requires_dist": [ "tornado (>=5.0.0)" ], "requires_python": "", "summary": "Skim milk. Gummy bears. Pure genius.", "version": "1.0.0" }, "last_serial": 4619681, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "1b0a701e458b4a719f059d1cf2d087a3", "sha256": "341fc4089f5824400d46f209f0a9d8af0566e8101411b0f6efa1ac4b92b5e72e" }, "downloads": -1, "filename": "sdsu-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1b0a701e458b4a719f059d1cf2d087a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10601, "upload_time": "2018-12-20T06:57:10", "url": "https://files.pythonhosted.org/packages/a9/58/79d5aa3258dda0c760db4ebe71f7a09e40de4672511ccd9b848f212d59fd/sdsu-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "583e8d4c9cd85de9b6e1db226240a914", "sha256": "0c9658e577c1fc57a31131dc9723fd639dfbcea6863ed4433b687bef59cf5a08" }, "downloads": -1, "filename": "sdsu-1.0.0.tar.gz", "has_sig": false, "md5_digest": "583e8d4c9cd85de9b6e1db226240a914", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10342, "upload_time": "2018-12-20T06:57:12", "url": "https://files.pythonhosted.org/packages/f3/f3/889c4749ee9725bec5d40bf551c27fe51c9c0848edd099d058fef23060eb/sdsu-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1b0a701e458b4a719f059d1cf2d087a3", "sha256": "341fc4089f5824400d46f209f0a9d8af0566e8101411b0f6efa1ac4b92b5e72e" }, "downloads": -1, "filename": "sdsu-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1b0a701e458b4a719f059d1cf2d087a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10601, "upload_time": "2018-12-20T06:57:10", "url": "https://files.pythonhosted.org/packages/a9/58/79d5aa3258dda0c760db4ebe71f7a09e40de4672511ccd9b848f212d59fd/sdsu-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "583e8d4c9cd85de9b6e1db226240a914", "sha256": "0c9658e577c1fc57a31131dc9723fd639dfbcea6863ed4433b687bef59cf5a08" }, "downloads": -1, "filename": "sdsu-1.0.0.tar.gz", "has_sig": false, "md5_digest": "583e8d4c9cd85de9b6e1db226240a914", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10342, "upload_time": "2018-12-20T06:57:12", "url": "https://files.pythonhosted.org/packages/f3/f3/889c4749ee9725bec5d40bf551c27fe51c9c0848edd099d058fef23060eb/sdsu-1.0.0.tar.gz" } ] }