Major part of #73 Unfortunately, it wasn't possible to split it to multiple smaller commits, since the changes touched the entire application substantially. Here is a short list of major changes: 1. Create a separate library (headscale-api), which is used as a convenient abstraction layer providing Pythonic interface with Pydantic. Headscale API is fully asynchronous library, benefitting from improved concurrency for backend requests thus increasing page load speed, e.g., on "Machines" page. 2. Create a common common, validated with flask-pydantic API passthrough layer from GUI to the backend. 3. Move authentication to a separate (auth.py), consolidating the functionality in a single place (with better place for expansion in the future). 4. Move configuration management to a separate module (config.py). Use Pydantic's BaseSettings for reading values from environment, with extensive validation and error reporting. 5. Reduce the number of health checks. - Now, most are performed during server initialization. If any test fails, the server is started in tainted mode, with only the error page exposed (thus reducing the surface of attack in invalid state). - Key checks are implicit in the requests to the backend and guarded by `@headscale.key_check_guard` decorator. - Key renewal is moved to server-side scheduler. 6. Introduce type hints to the level satisfactory for mypy static analysis. Also, enable some other linters in CI and add optional pre-commit hooks. 7. Properly handle some error states. Instead of returning success and handling different responses, if something fails, there is HTTP error code and standard response for it. 8. General formatting, small rewrites for clarity and more idiomatic Python constructs. Signed-off-by: Marek Pikuła <marek.pikula@embevity.com>
MaterializeCSS
Materialize, a CSS Framework based on material design.
-- Browse the docs --
Table of Contents
Quickstart:
Read the getting started guide for more information on how to use materialize.
- Download the latest release of materialize directly from GitHub. (Beta)
- Clone the repo:
git clone https://github.com/Dogfalo/materialize.git(Beta:git clone -b v1-dev https://github.com/Dogfalo/materialize.git) - Include the files via cdnjs. More here. (Beta)
- Install with npm:
npm install materialize-css(Beta:npm install materialize-css@next) - Install with Bower:
bower install materialize(DEPRECATED) - Install with Atmosphere:
meteor add materialize:materialize(Beta:meteor add materialize:materialize@=1.0.0-beta)
Documentation
The documentation can be found at http://materializecss.com. To run the documentation locally on your machine, you need Node.js installed on your computer.
Running documentation locally
Run these commands to set up the documentation:
git clone https://github.com/Dogfalo/materialize
cd materialize
npm install
Then run grunt monitor to compile the documentation. When it finishes, open a new browser window and navigate to localhost:8000. We use BrowserSync to display the documentation.
Documentation for previous releases
Previous releases and their documentation are available for download.
Supported Browsers:
Materialize is compatible with:
- Chrome 35+
- Firefox 31+
- Safari 9+
- Opera
- Edge
- IE 11+
Changelog
For changelogs, check out the Releases section of materialize or the CHANGELOG.md.
Testing
We use Jasmine as our testing framework and we're trying to write a robust test suite for our components. If you want to help, here's a starting guide on how to write tests in Jasmine.
Contributing
Check out the CONTRIBUTING document in the root of the repository to learn how you can contribute. You can also browse the help-wanted tag in our issue tracker to find things to do.
Copyright and license
Code Copyright 2018 Materialize. Code released under the MIT license.