diff --git a/.dockerignore b/.dockerignore index a29cd2ec..03466f0a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,5 @@ ui/node_modules ui/dist server/target -docker/dev/volumes -docker/federation/volumes +docs .git diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index be4c3f62..e2aa0547 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,3 @@ # These are supported funding model platforms patreon: dessalines -liberapay: Lemmy diff --git a/.gitignore b/.gitignore index 9f7fa1e3..e36af129 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,5 @@ ansible/inventory -ansible/inventory_dev ansible/passwords/ -docker/lemmy_mine.hjson -docker/dev/env_deploy.sh build/ .idea/ -ui/src/translations -docker/dev/volumes -docker/federation-test/volumes +docker/dev/config/config.hjson diff --git a/.travis.yml b/.travis.yml index 602a8613..5fc26cde 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,30 +5,21 @@ matrix: allow_failures: - rust: nightly fast_finish: true -cache: cargo +cache: + directories: + - /home/travis/.cargo before_cache: - - rm -rfv target/debug/incremental/lemmy_server-* - - rm -rfv target/debug/.fingerprint/lemmy_server-* - - rm -rfv target/debug/build/lemmy_server-* - - rm -rfv target/debug/deps/lemmy_server-* - - rm -rfv target/debug/lemmy_server.d + - rm -rf /home/travis/.cargo/registry before_script: - - psql -c "create user lemmy with password 'password' superuser;" -U postgres - - psql -c 'create database lemmy with owner lemmy;' -U postgres - - rustup component add clippy --toolchain stable-x86_64-unknown-linux-gnu + - psql -c "create user rrr with password 'rrr' superuser;" -U postgres + - psql -c 'create database rrr with owner rrr;' -U postgres before_install: - cd server script: - # Default checks, but fail if anything is detected - - cargo build - - cargo clippy -- -D clippy::style -D clippy::correctness -D clippy::complexity -D clippy::perf - - cargo install diesel_cli --no-default-features --features postgres --force - diesel migration run + - cargo build - cargo test env: - global: - - DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy - - RUST_TEST_THREADS=1 - + - DATABASE_URL=postgres://rrr:rrr@localhost/rrr addons: postgresql: "9.4" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index e0270d4c..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,35 +0,0 @@ -# Code of Conduct - -- We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. -- Please avoid using overtly sexual aliases or other nicknames that might detract from a friendly, safe and welcoming environment for all. -- Please be kind and courteous. There’s no need to be mean or rude. -- Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. -- Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. -- We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term “harassment” as including the definition in the Citizen Code of Conduct; if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don’t tolerate behavior that excludes people in socially marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the Lemmy moderation team immediately. Whether you’re a regular contributor or a newcomer, we care about making this community a safe place for you and we’ve got your back. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. - -[**Message the Moderation Team on Mastodon**](https://mastodon.social/@LemmyDev) - -[**Email The Moderation Team**](mailto:contact@lemmy.ml) - -## Moderation - -These are the policies for upholding our community’s standards of conduct. If you feel that a thread needs moderation, please contact the Lemmy moderation team . - -1. Remarks that violate the Lemmy standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.) -2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed. -3. Moderators will first respond to such remarks with a warning, at the same time the offending content will likely be removed whenever possible. -4. If the warning is unheeded, the user will be “kicked,” i.e., kicked out of the communication channel to cool off. -5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded. -6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology. -7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, in private. Complaints about bans in-channel are not allowed. -8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others. - -In the Lemmy community we strive to go the extra step to look out for each other. Don’t just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they’re off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely. - -And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could’ve communicated better — remember that it’s your responsibility to make others comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust. - -The enforcement policies listed above apply to all official Lemmy venues; including git repositories under [github.com/LemmyNet/lemmy](https://github.com/LemmyNet/lemmy) and [yerbamate.dev/dessalines/lemmy](https://yerbamate.dev/dessalines/lemmy), the [Matrix channel](https://matrix.to/#/!BZVTUuEiNmRcbFeLeI:matrix.org?via=matrix.org&via=privacytools.io&via=permaweb.io); and all instances under lemmy.ml. For other projects adopting the Rust Code of Conduct, please contact the maintainers of those projects for enforcement. If you wish to use this code of conduct for your own project, consider explicitly mentioning your moderation policy or making a copy with your own moderation policy so as to avoid confusion. - -Adapted from the [Rust Code of Conduct](https://www.rust-lang.org/policies/code-of-conduct), which is based on the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 7827d822..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -# Contributing - -See [here](https://dev.lemmy.ml/docs/contributing.html) for contributing Instructions. - diff --git a/README.md b/README.md index 09b2540f..fa35788d 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,99 @@ -
- + - -
- A link aggregator / reddit clone for the fediverse.
-
-
- View Site
- ·
- Documentation
- ·
- Report Bug
- ·
- Request Feature
- ·
- Releases
-
A link aggregator / reddit clone for the fediverse.
+
+
ws://***host***/api/v1/ws
to get started.
If the ***`host`*** supports secure connections, you can use wss://***host***/api/v1/ws
.
-#### Testing with Websocat
+### Testing with Websocat
[Websocat link](https://github.com/vi/websocat)
@@ -213,7 +159,7 @@ If the ***`host`*** supports secure connections, you can use wss://***host
A simple test command:
`{"op": "ListCategories"}`
-#### Testing with the WebSocket JavaScript API
+### Testing with the WebSocket JavaScript API
[WebSocket JavaScript API](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)
```javascript
@@ -225,32 +171,6 @@ ws.onopen = function () {
}));
};
```
-### HTTP
-
-Endpoints are at http://***host***/api/v1/***endpoint***
. They'll be listed below for each action.
-
-#### Testing with Curl
-
-##### Get Example
-
-```
-curl /community/list?sort=Hot
-```
-
-##### Post Example
-
-```
-curl -i -H \
-"Content-Type: application/json" \
--X POST \
--d '{
- "comment_id": X,
- "post_id": X,
- "score": X,
- "auth": "..."
-}' \
-/comment/like
-```
## Rate limits
@@ -281,11 +201,6 @@ These go wherever there is a `sort` field. The available sort types are:
- `TopYear` - the most upvoted posts/communities of the current year.
- `TopAll` - the most upvoted posts/communities on the current instance.
-### Websocket vs HTTP
-
-- Below are the websocket JSON requests / responses. For HTTP, ignore all fields except those inside `data`.
-- For example, an http login will be a `POST` `{username_or_email: X, password: X}`
-
### User / Authentication / Admin actions
#### Login
@@ -305,19 +220,13 @@ The `jwt` string should be stored and used anywhere `auth` is called for.
##### Response
```rust
{
- op: "Login",
- data: {
- jwt: String,
- }
+ op: String,
+ jwt: String
}
```
-##### HTTP
-
-`POST /user/login`
#### Register
-
Only the first user will be able to be the admin.
##### Request
@@ -336,17 +245,11 @@ Only the first user will be able to be the admin.
##### Response
```rust
{
- op: "Register",
- data: {
- jwt: String,
- }
+ op: String,
+ jwt: String
}
```
-##### HTTP
-
-`POST /user/register`
-
#### Get User Details
##### Request
```rust
@@ -367,20 +270,14 @@ Only the first user will be able to be the admin.
##### Response
```rust
{
- op: "GetUserDetails",
- data: {
- user: UserView,
- follows: Vec,
- moderates: Vec,
- comments: Vec,
- posts: Vec,
- }
+ op: String,
+ user: UserView,
+ follows: Vec,
+ moderates: Vec,
+ comments: Vec,
+ posts: Vec,
}
```
-##### HTTP
-
-`GET /user`
-
#### Save User Settings
##### Request
```rust
@@ -398,16 +295,10 @@ Only the first user will be able to be the admin.
##### Response
```rust
{
- op: "SaveUserSettings",
- data: {
- jwt: String
- }
+ op: String,
+ jwt: String
}
```
-##### HTTP
-
-`PUT /save_user_settings`
-
#### Get Replies / Inbox
##### Request
```rust
@@ -425,16 +316,10 @@ Only the first user will be able to be the admin.
##### Response
```rust
{
- op: "GetReplies",
- data: {
- replies: Vec,
- }
+ op: String,
+ replies: Vec,
}
```
-##### HTTP
-
-`GET /user/replies`
-
#### Get User Mentions
##### Request
@@ -453,42 +338,11 @@ Only the first user will be able to be the admin.
##### Response
```rust
{
- op: "GetUserMentions",
- data: {
- mentions: Vec,
- }
+ op: String,
+ mentions: Vec,
}
```
-##### HTTP
-
-`GET /user/mentions`
-
-#### Edit User Mention
-##### Request
-```rust
-{
- op: "EditUserMention",
- data: {
- user_mention_id: i32,
- read: Option,
- auth: String,
- }
-}
-```
-##### Response
-```rust
-{
- op: "EditUserMention",
- data: {
- mention: UserMentionView,
- }
-}
-```
-##### HTTP
-
-`PUT /user/mention`
-
#### Mark All As Read
Marks all user replies and mentions as read.
@@ -505,17 +359,11 @@ Marks all user replies and mentions as read.
##### Response
```rust
{
- op: "MarkAllAsRead",
- data: {
- replies: Vec,
- }
+ op: String,
+ replies: Vec,
}
```
-##### HTTP
-
-`POST /user/mark_all_as_read`
-
#### Delete Account
*Permananently deletes your posts and comments*
@@ -533,17 +381,11 @@ Marks all user replies and mentions as read.
##### Response
```rust
{
- op: "DeleteAccount",
- data: {
- jwt: String,
- }
+ op: String,
+ jwt: String,
}
```
-##### HTTP
-
-`POST /user/delete_account`
-
#### Add admin
##### Request
```rust
@@ -559,15 +401,10 @@ Marks all user replies and mentions as read.
##### Response
```rust
{
- op: "AddAdmin",
- data: {
- admins: Vec,
- }
+ op: String,
+ admins: Vec,
}
```
-##### HTTP
-
-`POST /admin/add`
#### Ban user
##### Request
@@ -586,16 +423,11 @@ Marks all user replies and mentions as read.
##### Response
```rust
{
- op: "BanUser",
- data: {
- user: UserView,
- banned: bool,
- }
+ op: String,
+ user: UserView,
+ banned: bool,
}
```
-##### HTTP
-
-`POST /user/ban`
### Site
#### List Categories
@@ -608,19 +440,13 @@ Marks all user replies and mentions as read.
##### Response
```rust
{
- op: "ListCategories",
- data: {
- categories: Vec
- }
+ op: String,
+ categories: Vec
}
```
-##### HTTP
-
-`GET /categories`
#### Search
-
-Search types are `All, Comments, Posts, Communities, Users, Url`
+Search types are `Both, Comments, Posts`.
##### Request
```rust
@@ -633,26 +459,17 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
sort: String,
page: Option,
limit: Option,
- auth?: Option,
}
}
```
##### Response
```rust
{
- op: "Search",
- data: {
- type_: String,
- comments: Vec,
- posts: Vec,
- communities: Vec,
- users: Vec,
- }
+ op: String,
+ comments: Vec,
+ posts: Vec,
}
```
-##### HTTP
-
-`POST /search`
#### Get Modlog
##### Request
@@ -670,24 +487,18 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "GetModlog",
- data: {
- removed_posts: Vec,
- locked_posts: Vec,
- removed_comments: Vec,
- removed_communities: Vec,
- banned_from_community: Vec,
- banned: Vec,
- added_to_community: Vec,
- added: Vec,
- }
+ op: String,
+ removed_posts: Vec,
+ locked_posts: Vec,
+ removed_comments: Vec,
+ removed_communities: Vec,
+ banned_from_community: Vec,
+ banned: Vec,
+ added_to_community: Vec,
+ added: Vec,
}
```
-##### HTTP
-
-`GET /modlog`
-
#### Create Site
##### Request
```rust
@@ -703,17 +514,11 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "CreateSite",
- data: {
- site: SiteView,
- }
+ op: String,
+ site: SiteView,
}
```
-##### HTTP
-
-`POST /site`
-
#### Edit Site
##### Request
```rust
@@ -729,15 +534,10 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "EditSite",
- data: {
- site: SiteView,
- }
+ op: String,
+ site: SiteView,
}
```
-##### HTTP
-
-`PUT /site`
#### Get Site
##### Request
@@ -749,17 +549,12 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "GetSite",
- data: {
- site: Option,
- admins: Vec,
- banned: Vec,
- }
+ op: String,
+ site: Option,
+ admins: Vec,
+ banned: Vec,
}
```
-##### HTTP
-
-`GET /site`
#### Transfer Site
##### Request
@@ -775,64 +570,12 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "TransferSite",
- data: {
- site: Option,
- admins: Vec,
- banned: Vec,
- }
+ op: String,
+ site: Option,
+ admins: Vec,
+ banned: Vec,
}
```
-##### HTTP
-
-`POST /site/transfer`
-
-#### Get Site Config
-##### Request
-```rust
-{
- op: "GetSiteConfig",
- data: {
- auth: String
- }
-}
-```
-##### Response
-```rust
-{
- op: "GetSiteConfig",
- data: {
- config_hjson: String,
- }
-}
-```
-##### HTTP
-
-`GET /site/config`
-
-#### Save Site Config
-##### Request
-```rust
-{
- op: "SaveSiteConfig",
- data: {
- config_hjson: String,
- auth: String
- }
-}
-```
-##### Response
-```rust
-{
- op: "SaveSiteConfig",
- data: {
- config_hjson: String,
- }
-}
-```
-##### HTTP
-
-`PUT /site/config`
### Community
#### Get Community
@@ -850,17 +593,12 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "GetCommunity",
- data: {
- community: CommunityView,
- moderators: Vec,
- admins: Vec,
- }
+ op: String,
+ community: CommunityView,
+ moderators: Vec,
+ admins: Vec,
}
```
-##### HTTP
-
-`GET /community`
#### Create Community
##### Request
@@ -879,15 +617,10 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "CreateCommunity",
- data: {
- community: CommunityView
- }
+ op: String,
+ community: CommunityView
}
```
-##### HTTP
-
-`POST /community`
#### List Communities
##### Request
@@ -905,15 +638,10 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "ListCommunities",
- data: {
- communities: Vec
- }
+ op: String,
+ communities: Vec
}
```
-##### HTTP
-
-`GET /community/list`
#### Ban from Community
##### Request
@@ -933,16 +661,11 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "BanFromCommunity",
- data: {
- user: UserView,
- banned: bool,
- }
+ op: String,
+ user: UserView,
+ banned: bool,
}
```
-##### HTTP
-
-`POST /community/ban_user`
#### Add Mod to Community
##### Request
@@ -960,15 +683,10 @@ Search types are `All, Comments, Posts, Communities, Users, Url`
##### Response
```rust
{
- op: "AddModToCommunity",
- data: {
- moderators: Vec,
- }
+ op: String,
+ moderators: Vec,
}
```
-##### HTTP
-
-`POST /community/mod`
#### Edit Community
Mods and admins can remove and lock a community, creators can delete it.
@@ -994,15 +712,10 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "EditCommunity",
- data: {
- community: CommunityView
- }
+ op: String,
+ community: CommunityView
}
```
-##### HTTP
-
-`PUT /community`
#### Follow Community
##### Request
@@ -1019,15 +732,10 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "FollowCommunity",
- data: {
- community: CommunityView
- }
+ op: String,
+ community: CommunityView
}
```
-##### HTTP
-
-`POST /community/follow`
#### Get Followed Communities
##### Request
@@ -1042,15 +750,10 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "GetFollowedCommunities",
- data: {
- communities: Vec
- }
+ op: String,
+ communities: Vec
}
```
-##### HTTP
-
-`GET /user/followed_communities`
#### Transfer Community
##### Request
@@ -1067,17 +770,12 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "TransferCommunity",
- data: {
- community: CommunityView,
- moderators: Vec,
- admins: Vec,
- }
+ op: String,
+ community: CommunityView,
+ moderators: Vec,
+ admins: Vec,
}
```
-##### HTTP
-
-`POST /community/transfer`
### Post
#### Create Post
@@ -1097,15 +795,10 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "CreatePost",
- data: {
- post: PostView
- }
+ op: String,
+ post: PostView
}
```
-##### HTTP
-
-`POST /post`
#### Get Post
##### Request
@@ -1121,22 +814,16 @@ Mods and admins can remove and lock a community, creators can delete it.
##### Response
```rust
{
- op: "GetPost",
- data: {
- post: PostView,
- comments: Vec,
- community: CommunityView,
- moderators: Vec,
- admins: Vec,
- }
+ op: String,
+ post: PostView,
+ comments: Vec,
+ community: CommunityView,
+ moderators: Vec,
+ admins: Vec,
}
```
-##### HTTP
-
-`GET /post`
#### Get Posts
-
Post listing types are `All, Subscribed, Community`
##### Request
@@ -1156,18 +843,12 @@ Post listing types are `All, Subscribed, Community`
##### Response
```rust
{
- op: "GetPosts",
- data: {
- posts: Vec,
- }
+ op: String,
+ posts: Vec,
}
```
-##### HTTP
-
-`GET /post/list`
#### Create Post Like
-
`score` can be 0, -1, or 1
##### Request
@@ -1184,18 +865,12 @@ Post listing types are `All, Subscribed, Community`
##### Response
```rust
{
- op: "CreatePostLike",
- data: {
- post: PostView
- }
+ op: String,
+ post: PostView
}
```
-##### HTTP
-
-`POST /post/like`
#### Edit Post
-
Mods and admins can remove and lock a post, creators can delete it.
##### Request
@@ -1220,17 +895,11 @@ Mods and admins can remove and lock a post, creators can delete it.
##### Response
```rust
{
- op: "EditPost",
- data: {
- post: PostView
- }
+ op: String,
+ post: PostView
}
```
-##### HTTP
-
-`PUT /post`
-
#### Save Post
##### Request
```rust
@@ -1246,15 +915,10 @@ Mods and admins can remove and lock a post, creators can delete it.
##### Response
```rust
{
- op: "SavePost",
- data: {
- post: PostView
- }
+ op: String,
+ post: PostView
}
```
-##### HTTP
-
-`POST /post/save`
### Comment
#### Create Comment
@@ -1274,19 +938,12 @@ Mods and admins can remove and lock a post, creators can delete it.
##### Response
```rust
{
- op: "CreateComment",
- data: {
- comment: CommentView
- }
+ op: String,
+ comment: CommentView
}
```
-##### HTTP
-
-`POST /comment`
-
#### Edit Comment
-
Mods and admins can remove a comment, creators can delete it.
##### Request
@@ -1310,15 +967,10 @@ Mods and admins can remove a comment, creators can delete it.
##### Response
```rust
{
- op: "EditComment",
- data: {
- comment: CommentView
- }
+ op: String,
+ comment: CommentView
}
```
-##### HTTP
-
-`PUT /comment`
#### Save Comment
##### Request
@@ -1335,18 +987,12 @@ Mods and admins can remove a comment, creators can delete it.
##### Response
```rust
{
- op: "SaveComment",
- data: {
- comment: CommentView
- }
+ op: String,
+ comment: CommentView
}
```
-##### HTTP
-
-`POST /comment/save`
#### Create Comment Like
-
`score` can be 0, -1, or 1
##### Request
@@ -1364,15 +1010,10 @@ Mods and admins can remove a comment, creators can delete it.
##### Response
```rust
{
- op: "CreateCommentLike",
- data: {
- comment: CommentView
- }
+ op: String,
+ comment: CommentView
}
```
-##### HTTP
-
-`POST /comment/like`
### RSS / Atom feeds
diff --git a/docs/src/contributing_apub_api_outline.md b/docs/apub_api_outline.md
similarity index 100%
rename from docs/src/contributing_apub_api_outline.md
rename to docs/apub_api_outline.md
diff --git a/docs/book.toml b/docs/book.toml
deleted file mode 100644
index 55cce8c0..00000000
--- a/docs/book.toml
+++ /dev/null
@@ -1,6 +0,0 @@
-[book]
-authors = ["Felix Ableitner"]
-language = "en"
-multilingual = false
-src = "src"
-title = "Lemmy Documentation"
diff --git a/docs/src/about_goals.md b/docs/goals.md
similarity index 74%
rename from docs/src/about_goals.md
rename to docs/goals.md
index e0427481..d8a71794 100644
--- a/docs/src/about_goals.md
+++ b/docs/goals.md
@@ -1,5 +1,4 @@
# Goals
-
- Come up with a name / codename.
- Must have communities.
- Must have threaded comments.
@@ -8,7 +7,6 @@
- Use websockets for post / gets to your own instance.
# Questions
-
- How does voting work? Should we go back to the old way of showing up and downvote counts? Or just a score?
- Decide on tech to be used
- Backend: Actix, Diesel.
@@ -19,7 +17,10 @@
- On mobile, allow you to switch between them. Default?
# Resources / Potential Libraries
-
+- Use the [activitypub crate.](https://docs.rs/activitypub/0.1.4/activitypub/)
+- https://docs.rs/activitypub/0.1.4/activitypub/
+- [Activitypub vocab.](https://www.w3.org/TR/activitystreams-vocabulary/)
+- [Activitypub main](https://www.w3.org/TR/activitypub/)
- [Diesel to Postgres data types](https://kotiri.com/2018/01/31/postgresql-diesel-rust-types.html)
- [helpful diesel examples](http://siciarz.net/24-days-rust-diesel/)
- [Recursive query for adjacency list for nested comments](https://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462)
@@ -35,20 +36,9 @@
- [Temp Icon](https://www.flaticon.com/free-icon/mouse_194242)
- [Rust docker build](https://shaneutt.com/blog/rust-fast-small-docker-image-builds/)
- [Zurb mentions](https://github.com/zurb/tribute)
-- [TippyJS](https://github.com/atomiks/tippyjs)
+- Activitypub guides
+ - https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/
+ - https://raw.githubusercontent.com/w3c/activitypub/gh-pages/activitypub-tutorial.txt
+ - https://github.com/tOkeshu/activitypub-example
+ - https://blog.joinmastodon.org/2018/07/how-to-make-friends-and-verify-requests/
-## Activitypub guides
-
-- https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/
-- https://raw.githubusercontent.com/w3c/activitypub/gh-pages/activitypub-tutorial.txt
-- https://github.com/tOkeshu/activitypub-example
-- https://blog.joinmastodon.org/2018/07/how-to-make-friends-and-verify-requests/
-- Use the [activitypub crate.](https://docs.rs/activitypub/0.1.4/activitypub/)
-- https://docs.rs/activitypub/0.1.4/activitypub/
-- [Activitypub vocab.](https://www.w3.org/TR/activitystreams-vocabulary/)
-- [Activitypub main](https://www.w3.org/TR/activitypub/)
-- [Federation.md](https://github.com/dariusk/gathio/blob/7fc93dbe9d4d99457a0e85c6c532112f415b7af2/FEDERATION.md)
-- [Activitypub implementers guide](https://socialhub.activitypub.rocks/t/draft-guide-for-new-activitypub-implementers/479)
-- [Data storage questions](https://socialhub.activitypub.rocks/t/data-storage-questions/579/3)
-- [Activitypub as it has been understood](https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood)
-- [Asonix http signatures in rust](https://git.asonix.dog/Aardwolf/http-signature-normalization)
diff --git a/docs/img/chat_screen.png b/docs/img/chat_screen.png
deleted file mode 100644
index 21a452dc..00000000
Binary files a/docs/img/chat_screen.png and /dev/null differ
diff --git a/docs/img/main_screen.png b/docs/img/main_screen.png
deleted file mode 100644
index 5d1f0c32..00000000
Binary files a/docs/img/main_screen.png and /dev/null differ
diff --git a/docs/img/rank_algorithm.png b/docs/img/rank_algorithm.png
deleted file mode 100644
index c8200f91..00000000
Binary files a/docs/img/rank_algorithm.png and /dev/null differ
diff --git a/docs/src/about_ranking.md b/docs/ranking.md
similarity index 88%
rename from docs/src/about_ranking.md
rename to docs/ranking.md
index fe9e82bb..361dc24d 100644
--- a/docs/src/about_ranking.md
+++ b/docs/ranking.md
@@ -18,7 +18,7 @@ Score = Upvotes - Downvotes
Time = time since submission (in hours)
Gravity = Decay gravity, 1.8 is default
```
-- For posts, in order to bring up active posts, it uses the latest comment time (limited to a max creation age of a month ago)
+
- Use Max(1, score) to make sure all comments are affected by time decay.
- Add 3 to the score, so that everything that has less than 3 downvotes will seem new. Otherwise all new comments would stay at zero, near the bottom.
- The sign and abs of the score are necessary for dealing with the log of negative scores.
@@ -26,4 +26,4 @@ Gravity = Decay gravity, 1.8 is default
A plot of rank over 24 hours, of scores of 1, 5, 10, 100, 1000, with a scale factor of 10k.
-![](https://raw.githubusercontent.com/LemmyNet/lemmy/master/docs/img/rank_algorithm.png)
+![](https://i.imgur.com/w8oBLlL.png)
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
deleted file mode 100644
index bff5cbf6..00000000
--- a/docs/src/SUMMARY.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Summary
-
-- [About](about.md)
- - [Features](about_features.md)
- - [Goals](about_goals.md)
- - [Post and Comment Ranking](about_ranking.md)
- - [Guide](about_guide.md)
-- [Administration](administration.md)
- - [Install with Docker](administration_install_docker.md)
- - [Install with Ansible](administration_install_ansible.md)
- - [Install with Kubernetes](administration_install_kubernetes.md)
- - [Configuration](administration_configuration.md)
- - [Backup and Restore](administration_backup_and_restore.md)
-- [Contributing](contributing.md)
- - [Docker Development](contributing_docker_development.md)
- - [Local Development](contributing_local_development.md)
- - [Federation Development](contributing_federation_development.md)
- - [Websocket/HTTP API](contributing_websocket_http_api.md)
- - [ActivityPub API Outline](contributing_apub_api_outline.md)
- - [Theming Guide](contributing_theming.md)
-- [Lemmy Council](lemmy_council.md)
diff --git a/docs/src/about.md b/docs/src/about.md
deleted file mode 100644
index 2c0e418b..00000000
--- a/docs/src/about.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## About The Project
-
-Front Page|Post
----|---
-![main screen](https://raw.githubusercontent.com/LemmyNet/lemmy/master/docs/img/main_screen.png)|![chat screen](https://raw.githubusercontent.com/LemmyNet/lemmy/master/docs/img/chat_screen.png)
-
-[Lemmy](https://github.com/LemmyNet/lemmy) is similar to sites like [Reddit](https://reddit.com), [Lobste.rs](https://lobste.rs), [Raddle](https://raddle.me), or [Hacker News](https://news.ycombinator.com/): you subscribe to forums you're interested in, post links and discussions, then vote, and comment on them. Behind the scenes, it is very different; anyone can easily run a server, and all these servers are federated (think email), and connected to the same universe, called the [Fediverse](https://en.wikipedia.org/wiki/Fediverse).
-
-For a link aggregator, this means a user registered on one server can subscribe to forums on any other server, and can have discussions with users registered elsewhere.
-
-The overall goal is to create an easily self-hostable, decentralized alternative to reddit and other link aggregators, outside of their corporate control and meddling.
-
-Each lemmy server can set its own moderation policy; appointing site-wide admins, and community moderators to keep out the trolls, and foster a healthy, non-toxic environment where all can feel comfortable contributing.
-
-*Note: Federation is still in active development*
-
-### Why's it called Lemmy?
-
-- Lead singer from [Motörhead](https://invidio.us/watch?v=pWB5JZRGl0U).
-- The old school [video game]().
-- The [Koopa from Super Mario](https://www.mariowiki.com/Lemmy_Koopa).
-- The [furry rodents](http://sunchild.fpwc.org/lemming-the-little-giant-of-the-north/).
-
-### Built With
-
-- [Rust](https://www.rust-lang.org)
-- [Actix](https://actix.rs/)
-- [Diesel](http://diesel.rs/)
-- [Inferno](https://infernojs.org)
-- [Typescript](https://www.typescriptlang.org/)
diff --git a/docs/src/about_features.md b/docs/src/about_features.md
deleted file mode 100644
index a8371fc4..00000000
--- a/docs/src/about_features.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Features
-
-- Open source, [AGPL License](/LICENSE).
-- Self hostable, easy to deploy.
- - Comes with [Docker](#docker), [Ansible](#ansible), [Kubernetes](#kubernetes).
-- Clean, mobile-friendly interface.
- - Only a minimum of a username and password is required to sign up!
- - User avatar support.
- - Live-updating Comment threads.
- - Full vote scores `(+/-)` like old reddit.
- - Themes, including light, dark, and solarized.
- - Emojis with autocomplete support. Start typing `:`
- - User tagging using `@`, Community tagging using `#`.
- - Integrated image uploading in both posts and comments.
- - A post can consist of a title and any combination of self text, a URL, or nothing else.
- - Notifications, on comment replies and when you're tagged.
- - Notifications can be sent via email.
- - i18n / internationalization support.
- - RSS / Atom feeds for `All`, `Subscribed`, `Inbox`, `User`, and `Community`.
-- Cross-posting support.
- - A *similar post search* when creating new posts. Great for question / answer communities.
-- Moderation abilities.
- - Public Moderation Logs.
- - Can sticky posts to the top of communities.
- - Both site admins, and community moderators, who can appoint other moderators.
- - Can lock, remove, and restore posts and comments.
- - Can ban and unban users from communities and the site.
- - Can transfer site and communities to others.
-- Can fully erase your data, replacing all posts and comments.
-- NSFW post / community support.
-- High performance.
- - Server is written in rust.
- - Front end is `~80kB` gzipped.
- - Supports arm64 / Raspberry Pi.
diff --git a/docs/src/about_guide.md b/docs/src/about_guide.md
deleted file mode 100644
index 16788ab9..00000000
--- a/docs/src/about_guide.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Lemmy Guide
-
-Start typing...
-
-- `@a_user_name` to get a list of usernames.
-- `#a_community` to get a list of communities.
-- `:emoji` to get a list of emojis.
-
-## Sorting
-
-*Applies to both posts and comments*
-
-Type | Description
---- | ---
-Hot | Shows *trending* posts, based on the score, and the most recent comment time.
-New | Newest posts.
-Top | Shows the highest scoring posts in the given time frame.
-
-For more detail, check the [Post and Comment Ranking details](about_ranking.md).
-
-## Markdown Guide
-
-Type | Or | … to Get
---- | --- | ---
-\*Italic\* | \_Italic\_ | _Italic_
-\*\*Bold\*\* | \_\_Bold\_\_ | **Bold**
-\# Heading 1 | Heading 1
========= | Heading 1
-\## Heading 2 | Heading 2
--------- | Heading 2
-\[Link\](http://a.com) | \[Link\]\[1\]
⋮
\[1\]: http://b.org | [Link](https://commonmark.org/)
-!\[Image\](http://url/a.png) | !\[Image\]\[1\]
⋮
\[1\]: http://url/b.jpg | ![Markdown](https://commonmark.org/help/images/favicon.png)
-\> Blockquote | | Blockquote
-\* List
\* List
\* List | \- List
\- List
\- List
| * List
* List
* List
-1\. One
2\. Two
3\. Three | 1) One
2) Two
3) Three | 1. One
2. Two
3. Three
-Horizontal Rule
\--- | Horizontal Rule
\*\*\* | Horizontal Rule
-\`Inline code\` with backticks | |`Inline code` with backticks
-\`\`\`
\# code block
print '3 backticks or'
print 'indent 4 spaces'
\`\`\` | ····\# code block
····print '3 backticks or'
····print 'indent 4 spaces' | \# code block
print '3 backticks or'
print 'indent 4 spaces'
-::: spoiler hidden or nsfw stuff
*a bunch of spoilers here*
::: | | hidden or nsfw stuff
a bunch of spoilers here
-
-[CommonMark Tutorial](https://commonmark.org/help/tutorial/)
-
diff --git a/docs/src/administration.md b/docs/src/administration.md
deleted file mode 100644
index 9851232d..00000000
--- a/docs/src/administration.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Admin info
-
-Information for Lemmy instance admins, and those who want to start an instance.
diff --git a/docs/src/administration_backup_and_restore.md b/docs/src/administration_backup_and_restore.md
deleted file mode 100644
index fe97cf88..00000000
--- a/docs/src/administration_backup_and_restore.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Backup and Restore Guide
-
-## Docker and Ansible
-
-When using docker or ansible, there should be a `volumes` folder, which contains both the database, and all the pictures. Copy this folder to the new instance to restore your data.
-
-### Incremental Database backup
-
-To incrementally backup the DB to an `.sql` file, you can run:
-
-```bash
-docker exec -t FOLDERNAME_postgres_1 pg_dumpall -c -U lemmy > lemmy_dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql
-```
-### A Sample backup script
-
-```bash
-#!/bin/sh
-# DB Backup
-ssh MY_USER@MY_IP "docker exec -t FOLDERNAME_postgres_1 pg_dumpall -c -U lemmy" > ~/BACKUP_LOCATION/INSTANCE_NAME_dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql
-
-# Volumes folder Backup
-rsync -avP -zz --rsync-path="sudo rsync" MY_USER@MY_IP:/LEMMY_LOCATION/volumes ~/BACKUP_LOCATION/FOLDERNAME
-```
-
-### Restoring the DB
-
-If you need to restore from a `pg_dumpall` file, you need to first clear out your existing database
-
-```bash
-# Drop the existing DB
-docker exec -i FOLDERNAME_postgres_1 psql -U lemmy -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
-
-# Restore from the .sql backup
-cat db_dump.sql | docker exec -i FOLDERNAME_postgres_1 psql -U lemmy # restores the db
-
-# This also might be necessary when doing a db import with a different password.
-docker exec -i FOLDERNAME_postgres_1 psql -U lemmy -c "alter user lemmy with password 'bleh'"
-```
-
-## More resources
-
-- https://stackoverflow.com/questions/24718706/backup-restore-a-dockerized-postgresql-database
-
-
diff --git a/docs/src/administration_configuration.md b/docs/src/administration_configuration.md
deleted file mode 100644
index 8900ce8d..00000000
--- a/docs/src/administration_configuration.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Configuration
-
-The configuration is based on the file [defaults.hjson](server/config/defaults.hjson). This file also contains documentation for all the available options. To override the defaults, you can copy the options you want to change into your local `config.hjson` file.
-
-Additionally, you can override any config files with environment variables. These have the same name as the config options, and are prefixed with `LEMMY_`. For example, you can override the `database.password` with
-`LEMMY__DATABASE__POOL_SIZE=10`.
-
-An additional option `LEMMY_DATABASE_URL` is available, which can be used with a PostgreSQL connection string like `postgres://lemmy:password@lemmy_db:5432/lemmy`, passing all connection details at once.
-
-If the Docker container is not used, manually create the database specified above by running the following commands:
-
-```bash
-cd server
-./db-init.sh
-```
diff --git a/docs/src/administration_install_ansible.md b/docs/src/administration_install_ansible.md
deleted file mode 100644
index 77d901b3..00000000
--- a/docs/src/administration_install_ansible.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Ansible Installation
-
-This is the same as the [Docker installation](administration_install_docker.md), except that Ansible handles all of it automatically. It also does some extra things like setting up TLS and email for your Lemmy instance.
-
-First, you need to [install Ansible on your local computer](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) (e.g. using `sudo apt install ansible`) or the equivalent for you platform.
-
-Then run the following commands on your local computer:
-
-```bash
-git clone https://github.com/LemmyNet/lemmy.git
-cd lemmy/ansible/
-cp inventory.example inventory
-nano inventory # enter your server, domain, contact email
-ansible-playbook lemmy.yml --become
-```
-
-To update to a new version, just run the following in your local Lemmy repo:
-```bash
-git pull origin master
-cd ansible
-ansible-playbook lemmy.yml --become
-```
diff --git a/docs/src/administration_install_docker.md b/docs/src/administration_install_docker.md
deleted file mode 100644
index 236faa6b..00000000
--- a/docs/src/administration_install_docker.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Docker Installation
-
-Make sure you have both docker and docker-compose(>=`1.24.0`) installed. On Ubuntu, just run `apt install docker-compose docker.io`. Next,
-
-```bash
-# create a folder for the lemmy files. the location doesnt matter, you can put this anywhere you want
-mkdir /lemmy
-cd /lemmy
-# download default config files
-wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/prod/docker-compose.yml
-wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/lemmy.hjson
-wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/iframely.config.local.js
-```
-
-After this, have a look at the [config file](administration_configuration.md) named `lemmy.hjson`, and adjust it, in particular the hostname, and possibly the db password. Then run:
-
-`docker-compose up -d`
-
-To make Lemmy available outside the server, you need to setup a reverse proxy, like Nginx. [A sample nginx config](https://raw.githubusercontent.com/dessalines/lemmy/master/ansible/templates/nginx.conf), could be setup with:
-
-```bash
-wget https://raw.githubusercontent.com/dessalines/lemmy/master/ansible/templates/nginx.conf
-# Replace the {{ vars }}
-sudo mv nginx.conf /etc/nginx/sites-enabled/lemmy.conf
-```
-
-You will also need to setup TLS, for example with [Let's Encrypt](https://letsencrypt.org/). After this you need to restart Nginx to reload the config.
-
-## Updating
-
-To update to the newest version, you can manually change the version in `docker-compose.yml`. Alternatively, fetch the latest version from our git repo:
-
-```bash
-wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/prod/docker-compose.yml
-docker-compose up -d
-```
diff --git a/docs/src/administration_install_kubernetes.md b/docs/src/administration_install_kubernetes.md
deleted file mode 100644
index 729cb155..00000000
--- a/docs/src/administration_install_kubernetes.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Kubernetes Installation
-
-You'll need to have an existing Kubernetes cluster and [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/).
-Setting this up will vary depending on your provider.
-To try it locally, you can use [MicroK8s](https://microk8s.io/) or [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/).
-
-Once you have a working cluster, edit the environment variables and volume sizes in `docker/k8s/*.yml`.
-You may also want to change the service types to use `LoadBalancer`s depending on where you're running your cluster (add `type: LoadBalancer` to `ports)`, or `NodePort`s.
-By default they will use `ClusterIP`s, which will allow access only within the cluster. See the [docs](https://kubernetes.io/docs/concepts/services-networking/service/) for more on networking in Kubernetes.
-
-**Important** Running a database in Kubernetes will work, but is generally not recommended.
-If you're deploying on any of the common cloud providers, you should consider using their managed database service instead (RDS, Cloud SQL, Azure Databse, etc.).
-
-Now you can deploy:
-
-```bash
-# Add `-n foo` if you want to deploy into a specific namespace `foo`;
-# otherwise your resources will be created in the `default` namespace.
-kubectl apply -f docker/k8s/db.yml
-kubectl apply -f docker/k8s/pictshare.yml
-kubectl apply -f docker/k8s/lemmy.yml
-```
-
-If you used a `LoadBalancer`, you should see it in your cloud provider's console.
diff --git a/docs/src/contributing.md b/docs/src/contributing.md
deleted file mode 100644
index 4eabd6fc..00000000
--- a/docs/src/contributing.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Contributing
-
-Information about contributing to Lemmy, whether it is translating, testing, designing or programming.
-
-## Issue tracking / Repositories
-
-- [GitHub (for issues)](https://github.com/LemmyNet/lemmy)
-- [Gitea](https://yerbamate.dev/dessalines/lemmy)
-- [GitLab](https://gitlab.com/dessalines/lemmy)
-
-## Translating
-
-Check out [Lemmy's Weblate](https://weblate.yerbamate.dev/projects/lemmy/) for translations.
-
-
-## Architecture
-
-### Front end
-
-- The front end is written in `typescript`, using a react-like framework called [inferno](https://infernojs.org/). All UI elements are reusable `.tsx` components.
-- The main page and routing are in `ui/src/index.tsx`.
-- The components are located in `ui/src/components`.
-
-### Back end
-
-- The back end is written in `rust`, using `diesel`, and `actix`.
-- The server source code is split into main sections in `server/src`. These include:
- - `db` - The low level database actions.
- - Database additions are done using diesel migrations. Run `diesel migration generate xxxxx` to add new things.
- - `api` - The high level user interactions (things like `CreateComment`)
- - `routes` - The server endpoints .
- - `apub` - The activitypub conversions.
- - `websocket` - Creates the websocket server.
-
-## Linting / Formatting
-
-- Every front and back end commit is automatically formatted then linted using `husky`, and `lint-staged`.
-- Rust with `cargo fmt` and `cargo clippy`.
-- Typescript with `prettier` and `eslint`.
diff --git a/docs/src/contributing_docker_development.md b/docs/src/contributing_docker_development.md
deleted file mode 100644
index afa05107..00000000
--- a/docs/src/contributing_docker_development.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Docker Development
-
-## Running
-
-```bash
-sudo apt install git docker-compose
-git clone https://github.com/LemmyNet/lemmy
-cd lemmy/docker/dev
-sudo docker-compose up --no-deps --build
-```
-
-and go to http://localhost:8536.
-
-To speed up the Docker compile, add the following to `/etc/docker/daemon.json` and restart Docker.
-```
-{
- "features": {
- "buildkit": true
- }
-}
-```
-
-If the build is still too slow, you will have to use a
-[local build](contributing_local_development.md) instead.
diff --git a/docs/src/contributing_federation_development.md b/docs/src/contributing_federation_development.md
deleted file mode 100644
index 80c9ec7e..00000000
--- a/docs/src/contributing_federation_development.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Federation Development
-
-## Setup
-
-If you don't have a local clone of the Lemmy repo yet, just run the following command:
-
-```bash
-git clone https://github.com/LemmyNet/lemmy -b federation
-```
-
-If you already have the Lemmy repo cloned, you need to add a new remote:
-```bash
-git remote add federation https://github.com/LemmyNet/lemmy
-git checkout federation
-git pull federation federation
-```
-
-## Running
-
-You need to have the following packages installed, the Docker service needs to be running.
-
-- docker
-- docker-compose
-- cargo
-- yarn
-
-Then run the following
-```bash
-cd dev/federation-test
-./run-federation-test.bash
-```
-
-After the build is finished and the docker-compose setup is running, open [127.0.0.1:8540](http://127.0.0.1:8540) and
-[127.0.0.1:8541](http://127.0.0.1:8541) in your browser to use the test instances. You can login as admin with
-username `lemmy` and password `lemmy`, or create new accounts.
-
-Please get in touch if you want to contribute to this, so we can coordinate things and avoid duplicate work.
diff --git a/docs/src/contributing_local_development.md b/docs/src/contributing_local_development.md
deleted file mode 100644
index 066386f5..00000000
--- a/docs/src/contributing_local_development.md
+++ /dev/null
@@ -1,67 +0,0 @@
-### Ubuntu
-
-
-#### Build requirements:
-```
-sudo apt install git cargo libssl-dev pkg-config libpq-dev yarn curl gnupg2 git
-# install yarn
-curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
-echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
-sudo apt update && sudo apt install yarn
-```
-
-#### Get the source code
-```
-git clone https://github.com/LemmyNet/lemmy.git
-# or alternatively from gitea
-# git clone https://yerbamate.dev/LemmyNet/lemmy.git
-```
-
-All the following commands need to be run either in `lemmy/server` or `lemmy/ui`, as indicated
-by the `cd` command.
-
-#### Build the backend (Rust)
-```
-cd server
-cargo build
-# for development, use `cargo check` instead)
-```
-
-#### Build the frontend (Typescript)
-```
-cd ui
-yarn
-yarn build
-```
-
-#### Setup postgresql
-```
-sudo apt install postgresql
-sudo systemctl start postgresql
-# initialize postgres database
-sudo -u postgres psql -c "create user lemmy with password 'password' superuser;" -U postgres
-sudo -u postgres psql -c 'create database lemmy with owner lemmy;' -U postgres
-export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
-# or execute server/db-init.sh
-```
-
-#### Run a local development instance
-```
-# run each of these in a seperate terminal
-cd server && cargo run
-ui & yarn start
-```
-
-Then open [localhost:4444](http://localhost:4444) in your browser. It will auto-refresh if you edit
-any frontend files. For backend coding, you will have to rerun `cargo run`. You can use
-`cargo check` as a faster way to find compilation errors.
-
-To speed up incremental builds, you can add the following to `~/.cargo/config`:
-```
-[target.x86_64-unknown-linux-gnu]
-rustflags = ["-Clink-arg=-fuse-ld=lld"]
-```
-
-Note that this setup doesn't include image uploads or link previews (provided by pict-rs and
-iframely respectively). If you want to test those, you should use the
-[Docker development](contributing_docker_development.md).
diff --git a/docs/src/contributing_theming.md b/docs/src/contributing_theming.md
deleted file mode 100644
index 25c8ca6d..00000000
--- a/docs/src/contributing_theming.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Theming Guide
-
-Lemmy uses [Bootstrap v4](https://getbootstrap.com/), and very few custom css classes, so any bootstrap v4 compatible theme should work fine.
-
-## Creating
-
-- Use a tool like [bootstrap.build](https://bootstrap.build/) to create a bootstrap v4 theme. Export the `bootstrap.min.css` once you're done, and save the `_variables.scss` too.
-
-## Testing
-
-- To test out a theme, you can either use your browser's web tools, or a plugin like stylus to copy-paste a theme, when viewing Lemmy.
-
-## Adding
-
-1. Copy `{my-theme-name}.min.css` to `ui/assets/css/themes`. (You can also copy the `_variables.scss` here if you want).
-1. Go to `ui/src/utils.ts` and add `{my-theme-name}` to the themes list.
-1. Test locally
-1. Do a pull request with those changes.
diff --git a/docs/src/lemmy_council.md b/docs/src/lemmy_council.md
deleted file mode 100644
index 96234ff9..00000000
--- a/docs/src/lemmy_council.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Lemmy Council
-
-- A group of lemmy developers and users that use a well-defined democratic process to steer the project in a positive direction, keep it aligned to community goals, and resolve conflicts.
-
-## Voting / Decision-Making
-
-### Process
-- Anything is open for discussion
-- Voting done through matrix chat reacts (thumbs up/thumbs down)
-- Require a simple majority for votes. (Maybe 2/3rds for more debated decisions).
-- Once a decision is reached democratically, the dicision is binding and all group members have to follow it
-- All members of the Lemmy council have equal voting power.
-- Voting must stay open for at least 2 days.
-
-### What gets voted on
-- Membership (joining, removing)
-- Coding direction
- - Priorities / Emphasis
- - Controversial features (For example, an unpopular feature should be removed)
-- Communication mediums
-- Conflict resolution
-- dev.lemmy.ml (domain and server)
-- lemmy.ml and subdomains (excluding communism.lemmy.ml)
-- git repo including mirrors (on github, gitea, etc)
-- Any official accounts of the Lemmy project, for example the Mastodon account or the Liberapay account
-- Changes to these rules
-
-## Joining
-- We use the following process: anyone who is active around Lemmy can recommend any other active person to join the council. This has to be approved by a majority of the council.
-- Active users are defined as those who contribute to Lemmy in some way for at least an hour per week on average, doing things like reporting bugs, discussing rules and features, translating, promoting, developing, or doing other things that aim to improve Lemmy as a whole.
- -> people should have joined at least a month ago.
-- The member list is public.
-- Note: we would like to have a process where community members can elect candidates for the council, but this is not realistic because a single user could easily create multiple accounts and cheat the vote.
-- Limit growth to one new member per month at most.
-
-## Removing members
-- Inactive members should be removed from the council after a few months of inactivity, and after receiving a notification about this.
-- Members that dont follow binding council decisions should be removed.
-- Any member can be removed in a vote.
-
-## Goals
-- We encourage the membership of groups such as LGBT, religious or ethnic minorities, abuse victims, etc etc, and strive to create a safe space for them to express their opinions. We also support measures to increase participation by the previously mentioned groups.
-- The following are banned, and will always be harshly punished: fascism, abuse, racism, sexism, etc etc,
-
-## Communication
-- A private Matrix chat for all council members.
-- (Once private communities are done) A private community on dev.lemmy.ml for issues.
-
-## Member List / Contact Info
-General Contact [@LemmyDev Mastodon](https://mastodon.social/@LemmyDev)
-
-- Dessalines [Matrix](https://matrix.to/#/@happydooby:matrix.org)
-- Nutomic [Matrix](https://matrix.to/#/@nutomic:matrix.org), [Mastodon](https://radical.town/@felix)
diff --git a/install.sh b/install.sh
index fb42b26d..bbed1c9b 100755
--- a/install.sh
+++ b/install.sh
@@ -1,73 +1,16 @@
#!/bin/sh
set -e
-# Set the database variable to the default first.
-# Don't forget to change this string to your actual database parameters
-# if you don't plan to initialize the database in this script.
-export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
-
-# Set other environment variables
+export DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
export JWT_SECRET=changeme
export HOSTNAME=rrr
-yes_no_prompt_invalid() {
- echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2
-}
-
-ask_to_init_db() {
- init_db_valid=0
- init_db_final=0
- while [ "$init_db_valid" == 0 ]
- do
- read -p "Initialize database (y/n)? " init_db
- case "$init_db" in
- [yY]* ) init_db_valid=1; init_db_final=1;;
- [nN]* ) init_db_valid=1; init_db_final=0;;
- * ) yes_no_prompt_invalid;;
- esac
- echo
- done
- if [ "$init_db_final" = 1 ]
- then
- source ./server/db-init.sh
- read -n 1 -s -r -p "Press ANY KEY to continue execution of this script, press CTRL+C to quit..."
- echo
- fi
-}
-
-ask_to_auto_reload() {
- auto_reload_valid=0
- auto_reload_final=0
- while [ "$auto_reload_valid" == 0 ]
- do
- echo "Automagically reload the project when source files are changed?"
- echo "ONLY ENABLE THIS FOR DEVELOPMENT!"
- read -p "(y/n) " auto_reload
- case "$auto_reload" in
- [yY]* ) auto_reload_valid=1; auto_reload_final=1;;
- [nN]* ) auto_reload_valid=1; auto_reload_final=0;;
- * ) yes_no_prompt_invalid;;
- esac
- echo
- done
- if [ "$auto_reload_final" = 1 ]
- then
- cd ui && yarn start
- cd server && cargo watch -x run
- fi
-}
-
-# Optionally initialize the database
-ask_to_init_db
-
-# Build the web client
cd ui
yarn
yarn build
-
-# Build and run the backend
cd ../server
-RUST_LOG=debug cargo run
+cargo run
-# For live coding, where both the front and back end, automagically reload on any save
-ask_to_auto_reload
+# For live coding, where both the front and back end, automagically reload on any save, do:
+# cd ui && yarn start
+# cd server && cargo watch -x run
diff --git a/server/.gitignore b/server/.gitignore
index 00e9d452..a68a6365 100644
--- a/server/.gitignore
+++ b/server/.gitignore
@@ -2,5 +2,3 @@
.env
.idea
env_setup.sh
-query_testing/*.json
-query_testing/*.json.old
diff --git a/server/.rustfmt.toml b/server/.rustfmt.toml
index 684a7f8a..b196eaa2 100644
--- a/server/.rustfmt.toml
+++ b/server/.rustfmt.toml
@@ -1,2 +1 @@
tab_spaces = 2
-edition="2018"
\ No newline at end of file
diff --git a/server/Cargo.lock b/server/Cargo.lock
index f91b665b..2bd51b8c 100644
--- a/server/Cargo.lock
+++ b/server/Cargo.lock
@@ -2,485 +2,419 @@
# It is not intended for manual editing.
[[package]]
name = "activitypub"
-version = "0.2.0"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "activitystreams-derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "activitystreams-traits 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "activitystreams-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitystreams-types 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "activitystreams-derive"
-version = "0.2.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "activitystreams-traits"
-version = "0.2.0"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "thiserror 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "activitystreams-types"
-version = "0.3.0"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "activitystreams-derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "activitystreams-traits 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix"
-version = "0.9.0"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-rt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix_derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hashbrown 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-resolver 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-codec"
-version = "0.2.0"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-connect"
-version = "1.0.2"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-utils 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-resolver 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-files"
-version = "0.2.1"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "v_htmlescape 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "v_htmlescape 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-http"
-version = "1.0.1"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-connect 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-connect 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-server-config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-threadpool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-utils 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"copyless 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "flate2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "h2 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
"httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "actix-macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-resolver 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-router"
-version = "0.2.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytestring 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-rt"
-version = "1.1.1"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-threadpool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"copyless 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-server"
-version = "1.0.2"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-rt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-server-config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-signal 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "actix-server-config"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-service"
-version = "1.0.5"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "actix-testing"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-threadpool"
-version = "0.3.1"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "actix-tls"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "actix-utils"
-version = "1.0.6"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-web"
-version = "2.0.0"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-router 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-testing 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web-codegen 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "awc 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-router 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-rt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-server 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-server-config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-threadpool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-utils 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web-codegen 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "awc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-web-actors"
-version = "2.0.0"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix-web-codegen"
-version = "0.2.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "actix_derive"
-version = "0.5.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "adler32"
-version = "1.0.4"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "aho-corasick"
-version = "0.7.10"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "ansi_term"
-version = "0.11.0"
+name = "aho-corasick"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "arc-swap"
-version = "0.4.5"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "arrayvec"
-version = "0.4.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "ascii_utils"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "async-trait"
-version = "0.1.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "attohttpc"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "webpki-roots 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "atty"
-version = "0.2.14"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "autocfg"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "autocfg"
-version = "1.0.0"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "awc"
-version = "1.0.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "backtrace"
-version = "0.3.46"
+version = "0.3.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "backtrace-sys"
-version = "0.1.35"
+version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -488,7 +422,7 @@ name = "base64"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -497,47 +431,26 @@ name = "base64"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "base64"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "base64"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "bcrypt"
-version = "0.7.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"blowfish 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "bitflags"
-version = "1.2.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "block-buffer"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "block-cipher-trait"
version = "0.6.2"
@@ -546,22 +459,14 @@ dependencies = [
"generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "block-padding"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "blowfish"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"block-cipher-trait 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -569,8 +474,8 @@ name = "brotli-sys"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -579,7 +484,7 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -587,102 +492,72 @@ name = "bufstream"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "bumpalo"
-version = "3.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "byte-tools"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "byteorder"
-version = "1.3.4"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bytes"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "bytestring"
-version = "0.1.5"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "c2-chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cc"
-version = "1.0.50"
+version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "cfg-if"
-version = "0.1.10"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "chrono"
-version = "0.4.11"
+version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "clap"
-version = "2.33.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "cloudabi"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "comrak"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "entities 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "twoway 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode_categories 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "config"
-version = "0.10.1"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde-hjson 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-ini 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde-hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -692,16 +567,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "core-foundation"
-version = "0.7.0"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation-sys"
-version = "0.7.0"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -709,114 +584,127 @@ name = "crc32fast"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-channel"
-version = "0.4.2"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-utils"
-version = "0.7.2"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "darling"
-version = "0.10.2"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "darling_core 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "darling_macro 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "darling_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "darling_macro 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "darling_core"
-version = "0.10.2"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"ident_case 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "darling_macro"
-version = "0.10.2"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "darling_core 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "darling_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "derive_builder"
-version = "0.9.0"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "darling 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_builder_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "darling 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_builder_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "derive_builder_core"
-version = "0.9.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "darling 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "darling 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "derive_more"
-version = "0.99.5"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "diesel"
-version = "1.4.4"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "diesel_derives 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diesel_derives 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "r2d2 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "diesel_derives"
-version = "1.4.1"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -824,31 +712,44 @@ name = "diesel_migrations"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "migrations_macros 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "migrations_internals 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "migrations_macros 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "digest"
-version = "0.8.1"
+name = "docopt"
+version = "0.6.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "dotenv"
-version = "0.15.0"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "dtoa"
-version = "0.4.5"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "either"
-version = "1.5.3"
+version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -857,9 +758,9 @@ version = "0.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -924,65 +825,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "encoding_rs"
-version = "0.8.22"
+version = "0.8.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "entities"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "enum-as-inner"
-version = "0.3.2"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "env_logger"
-version = "0.7.1"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "failure"
-version = "0.1.8"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "backtrace 0.3.33 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "failure_derive"
-version = "0.1.7"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "fake-simd"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "fast_chemail"
version = "0.9.6"
@@ -993,13 +883,13 @@ dependencies = [
[[package]]
name = "flate2"
-version = "1.0.14"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz_oxide_c_api 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1030,7 +920,7 @@ name = "fuchsia-zircon"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1041,144 +931,75 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "futures"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "futures-channel"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "futures-core"
-version = "0.3.4"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "futures-executor"
-version = "0.3.4"
+name = "gcc"
+version = "0.3.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "futures-io"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "futures-macro"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "futures-sink"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "futures-task"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "futures-util"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "fxhash"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "generic-array"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "getrandom"
-version = "0.1.14"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "h2"
-version = "0.2.4"
+version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
+[[package]]
+name = "hashbrown"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "hashbrown"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
[[package]]
name = "heck"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "hermit-abi"
-version = "0.1.11"
+name = "hjson"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde-hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1186,20 +1007,10 @@ name = "hostname"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
"winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "hostname"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "htmlescape"
version = "0.3.1"
@@ -1207,12 +1018,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "http"
-version = "0.2.1"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1222,10 +1033,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "humantime"
-version = "1.3.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1235,28 +1046,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "idna"
-version = "0.2.0"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "indexmap"
-version = "1.3.2"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "iovec"
-version = "0.1.4"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1264,36 +1073,34 @@ name = "ipconfig"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "socket2 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
"widestring 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winreg 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "itoa"
-version = "0.4.5"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "js-sys"
-version = "0.3.37"
+name = "itoa"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "jsonwebtoken"
-version = "7.1.0"
+version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pem 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "simple_asn1 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1312,93 +1119,83 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lazy_static"
-version = "1.4.0"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
+[[package]]
+name = "lazy_static"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
[[package]]
name = "lemmy_server"
version = "0.0.1"
dependencies = [
- "activitypub 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-files 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "actix-web-actors 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "attohttpc 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bcrypt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "comrak 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "config 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "activitypub 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-files 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "actix-web-actors 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bcrypt 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diesel 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"diesel_migrations 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dotenv 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dotenv 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
"htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "jsonwebtoken 7.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lettre 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "lettre_email 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "rss 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
- "sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "strum 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "strum_macros 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "jsonwebtoken 6.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rss 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lettre"
-version = "0.9.3"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
"hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lettre_email"
-version = "0.9.4"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"email 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "lettre 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "lexical-core"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "libc"
-version = "0.2.69"
+version = "0.2.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1417,18 +1214,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lock_api"
-version = "0.3.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "log"
-version = "0.4.8"
+version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1439,84 +1253,100 @@ dependencies = [
"linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "maplit"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "match_cfg"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "matches"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "maybe-uninit"
-version = "2.0.0"
+name = "memchr"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "memchr"
-version = "2.3.3"
+version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "migrations_internals"
-version = "1.4.1"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diesel 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "migrations_macros"
-version = "1.4.2"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "migrations_internals 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "mime"
-version = "0.3.16"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "mime_guess"
-version = "2.0.3"
+version = "2.0.0-alpha.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "miniz-sys"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "miniz_oxide"
-version = "0.3.6"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "miniz_oxide_c_api"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz_oxide 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "mio"
-version = "0.6.21"
+version = "0.6.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1528,9 +1358,9 @@ name = "mio-uds"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1546,18 +1376,18 @@ dependencies = [
[[package]]
name = "native-tls"
-version = "0.2.4"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl 0.10.25 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)",
- "schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
+ "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1566,52 +1396,27 @@ name = "net2"
version = "0.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "nodrop"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "nom"
version = "4.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "nom"
-version = "5.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "num-integer"
-version = "0.1.42"
+version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1619,42 +1424,41 @@ name = "num-traits"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-traits"
-version = "0.2.11"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num_cpus"
-version = "1.13.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "opaque-debug"
-version = "0.2.3"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "openssl"
-version = "0.10.29"
+version = "0.10.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
"foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1664,128 +1468,164 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "openssl-sys"
-version = "0.9.58"
+version = "0.9.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "owning_ref"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "parking_lot"
-version = "0.10.2"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot_core 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "parking_lot_core"
-version = "0.7.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "pem"
+name = "parking_lot_core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot_core"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "percent-encoding"
-version = "2.1.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "pest"
-version = "2.1.3"
+name = "phf"
+version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "pest_derive"
-version = "2.1.0"
+name = "phf_codegen"
+version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "pest_generator"
-version = "2.1.3"
+name = "phf_generator"
+version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "pest_meta"
-version = "2.1.3"
+name = "phf_shared"
+version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "pin-project"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "pin-project-internal 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "pin-project-internal"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "pin-utils"
-version = "0.1.0-alpha.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "pkg-config"
-version = "0.3.17"
+version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "ppv-lite86"
-version = "0.2.6"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1793,57 +1633,80 @@ name = "pq-sys"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "proc-macro-hack"
-version = "0.5.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "proc-macro-nested"
-version = "0.1.4"
+name = "proc-macro2"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "proc-macro2"
-version = "1.0.10"
+version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quick-error"
-version = "1.2.3"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "quick-xml"
-version = "0.17.2"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quote"
-version = "1.0.3"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "quote"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "r2d2"
-version = "0.8.8"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scheduled-thread-pool 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1852,10 +1715,10 @@ version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1863,28 +1726,28 @@ name = "rand"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand"
-version = "0.7.3"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1893,17 +1756,18 @@ name = "rand_chacha"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand_chacha"
-version = "0.2.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1911,20 +1775,20 @@ name = "rand_core"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand_core"
-version = "0.4.2"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rand_core"
-version = "0.5.1"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1940,7 +1804,7 @@ name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1956,9 +1820,9 @@ name = "rand_jitter"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1968,10 +1832,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1979,8 +1843,8 @@ name = "rand_pcg"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2006,63 +1870,106 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "regex"
-version = "1.3.7"
+version = "0.1.80"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex-syntax"
-version = "0.6.17"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
+[[package]]
+name = "regex-syntax"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
[[package]]
name = "remove_dir_all"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "resolv-conf"
-version = "0.6.3"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "hostname 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ring"
-version = "0.16.12"
+version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rss"
-version = "1.9.0"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "derive_builder 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "quick-xml 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "derive_builder 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quick-xml 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
+[[package]]
+name = "rust-crypto"
+version = "0.2.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
[[package]]
name = "rustc-demangle"
-version = "0.1.16"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -2073,21 +1980,9 @@ dependencies = [
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "rustls"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "ryu"
-version = "1.0.3"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -2097,54 +1992,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "schannel"
-version = "0.1.19"
+version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "scheduled-thread-pool"
-version = "0.2.4"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "scopeguard"
-version = "1.1.0"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "sct"
-version = "0.6.0"
+name = "scopeguard"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "security-framework"
-version = "0.4.4"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "security-framework-sys"
-version = "0.4.3"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2167,42 +2056,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "serde"
-version = "1.0.106"
+version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde-hjson"
-version = "0.9.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_derive"
-version = "1.0.106"
+version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_json"
-version = "1.0.52"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2215,24 +2116,13 @@ dependencies = [
[[package]]
name = "serde_urlencoded"
-version = "0.6.1"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "sha-1"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2241,34 +2131,27 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "sha2"
-version = "0.8.1"
+name = "signal-hook"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "signal-hook-registry 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "signal-hook-registry"
-version = "1.2.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "arc-swap 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "arc-swap 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "simple_asn1"
-version = "0.4.0"
+name = "siphasher"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-bigint 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "slab"
@@ -2277,75 +2160,116 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "smallvec"
-version = "1.3.0"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "smallvec"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "socket2"
-version = "0.3.12"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "spin"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "string"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "strsim"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "static_assertions"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "strsim"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "strsim"
-version = "0.9.3"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strum"
-version = "0.18.0"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strum_macros"
-version = "0.18.0"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "syn"
-version = "1.0.17"
+version = "0.11.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "0.13.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "synom"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "synstructure"
-version = "0.12.3"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2353,54 +2277,45 @@ name = "tempfile"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "termcolor"
-version = "1.1.0"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "textwrap"
-version = "0.11.0"
+name = "thread-id"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "thiserror"
-version = "1.0.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "thiserror-impl 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "thread_local"
-version = "1.0.1"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2408,7 +2323,7 @@ name = "threadpool"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2416,129 +2331,204 @@ name = "time"
version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio"
-version = "0.2.20"
+name = "tokio-codec"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-sync 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-util"
-version = "0.2.0"
+name = "tokio-signal"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "signal-hook 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-util"
-version = "0.3.1"
+name = "tokio-sync"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tokio-udp"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "toml"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "trust-dns-proto"
-version = "0.18.0-alpha.2"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "async-trait 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
- "enum-as-inner 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "enum-as-inner 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "socket2 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "trust-dns-resolver"
-version = "0.18.0-alpha.2"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
"ipconfig 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "resolv-conf 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)",
- "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "resolv-conf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "trust-dns-proto 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
-[[package]]
-name = "twoway"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "unchecked-index 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "typed-arena"
-version = "1.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "typenum"
-version = "1.12.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "ucd-trie"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "unchecked-index"
-version = "0.2.2"
+name = "ucd-util"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicase"
-version = "2.6.0"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicase"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2551,47 +2541,53 @@ dependencies = [
[[package]]
name = "unicode-normalization"
-version = "0.1.12"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-segmentation"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "unicode-width"
-version = "0.1.7"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicode-xid"
-version = "0.2.0"
+version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "unicode_categories"
-version = "0.1.1"
+name = "unicode-xid"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "untrusted"
-version = "0.7.0"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "url"
-version = "2.1.1"
+version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
+ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "utf8-ranges"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
[[package]]
name = "uuid"
version = "0.7.4"
@@ -2602,40 +2598,36 @@ dependencies = [
[[package]]
name = "v_escape"
-version = "0.7.4"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "v_escape_derive 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "v_escape_derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "v_escape_derive"
-version = "0.5.6"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "v_htmlescape"
-version = "0.4.5"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "v_escape 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "v_escape 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "vcpkg"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "vec_map"
-version = "0.8.1"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -2643,91 +2635,6 @@ name = "version_check"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-[[package]]
-name = "version_check"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "wasi"
-version = "0.9.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "web-sys"
-version = "0.3.37"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "webpki"
-version = "0.21.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "webpki-roots"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
[[package]]
name = "widestring"
version = "0.4.0"
@@ -2740,7 +2647,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi"
-version = "0.3.8"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2759,10 +2666,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-util"
-version = "0.1.4"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2771,11 +2678,20 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "winreg"
-version = "0.6.2"
+name = "wincolor"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winreg"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2783,7 +2699,7 @@ name = "winutil"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2795,87 +2711,83 @@ dependencies = [
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
+[[package]]
+name = "yaml-rust"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
[metadata]
-"checksum activitypub 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d538a21b137ec0f63cc579ef4afa4ab13aa85b4f8af15a033683edd97c50718d"
-"checksum activitystreams-derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65608fdeae5eb05485d5b71a3d2242d76b2b7413608c196d47eb4dff3eed7b85"
-"checksum activitystreams-traits 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0c2a3958d240f40eff1f31b5f679a6e0d4ce2a16812886a3ec0164f3a2ca517"
-"checksum activitystreams-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0598820663a59e5eaafeeedd3a7f7efc93db4ed6172905baec05503095ba5c0e"
-"checksum actix 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4af87564ff659dee8f9981540cac9418c45e910c8072fdedd643a262a38fcaf"
-"checksum actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "09e55f0a5c2ca15795035d90c46bd0e73a5123b72f68f12596d6ba5282051380"
-"checksum actix-connect 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c95cc9569221e9802bf4c377f6c18b90ef10227d787611decf79fd47d2a8e76c"
-"checksum actix-files 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "301482841d3d74483a446ead63cb7d362e187d2c8b603f13d91995621ea53c46"
-"checksum actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c16664cc4fdea8030837ad5a845eb231fb93fc3c5c171edfefb52fad92ce9019"
-"checksum actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "21705adc76bbe4bc98434890e73a89cd00c6015e5704a60bb6eea6c3b72316b6"
-"checksum actix-router 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d7a10ca4d94e8c8e7a87c5173aba1b97ba9a6563ca02b0e1cd23531093d3ec8"
-"checksum actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "143fcc2912e0d1de2bcf4e2f720d2a60c28652ab4179685a1ee159e0fb3db227"
-"checksum actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "582a7173c281a4f46b5aa168a11e7f37183dcb71177a39312cc2264da7a632c9"
-"checksum actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3e4fc95dfa7e24171b2d0bb46b85f8ab0e8499e4e3caec691fc4ea65c287564"
-"checksum actix-testing 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48494745b72d0ea8ff0cf874aaf9b622a3ee03d7081ee0c04edea4f26d32c911"
-"checksum actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4082192601de5f303013709ff84d81ca6a1bc4af7fb24f367a500a23c6e84e"
-"checksum actix-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4e5b4faaf105e9a6d389c606c298dcdb033061b00d532af9df56ff3a54995a8"
-"checksum actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fcf8f5631bf01adec2267808f00e228b761c60c0584cc9fa0b5364f41d147f4e"
-"checksum actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3158e822461040822f0dbf1735b9c2ce1f95f93b651d7a7aded00b1efbb1f635"
-"checksum actix-web-actors 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1bd41bd66c4e9b5274cec87aac30168e63d64e96fd19db38edef6b46ba2982"
-"checksum actix-web-codegen 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f00371942083469785f7e28c540164af1913ee7c96a4534acb9cea92c39f057"
-"checksum actix_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c"
-"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
-"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
-"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-"checksum arc-swap 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825"
-"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
+"checksum activitypub 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dbb11d9099278667d3723c6491f25ea34dcae3eb54d73070e665d312c4455b25"
+"checksum activitystreams-derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "176bdecfca82b1980e4769e3d54b6a392284b724083e0bff68272e290f17458f"
+"checksum activitystreams-traits 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "670ef03168e704b0cae242e7a5d8b40506772b339687e01a3496fc4afe2e8542"
+"checksum activitystreams-types 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ff74c5765278614a009f97b9ec12f9a7c732bbcc5e0337fcfcab619b784860ec"
+"checksum actix 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "671ce3d27313f236827a5dd153a1073ad03ef31fc77f562020263e7830cf1ef7"
+"checksum actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453"
+"checksum actix-connect 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d161322a26e6b76d6598f48654afbdcfee644c900d4368e9962ec68abd0713b"
+"checksum actix-files 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f1e4640b28cd96059541c932f6f350c63c76688e43d68305cdb88e0004da12b5"
+"checksum actix-http 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "59698e11ceb42ea16a2e491bd5a9b48adc7268323a5b600522d408d09783828c"
+"checksum actix-router 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "23224bb527e204261d0291102cb9b52713084def67d94f7874923baefe04ccf7"
+"checksum actix-rt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "18d9054b1cfacfa441846b9b99001010cb8fbb02130e6cfdb25cea36d3e98e87"
+"checksum actix-server 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb3038e9e457e0a498ea682723e0f4e6cc2c4f362a1868d749808355275ad959"
+"checksum actix-server-config 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "483a34989c682d93142bacad6300375bb6ad8002d2e0bb249dbad86128b9ff30"
+"checksum actix-service 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aaecc01bbc595ebd7a563a7d4f8a607d0b964bb55273c6f362b0b02c26508cf2"
+"checksum actix-threadpool 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1c29f7c554d56b3841f4bb85d5b3dee01ba536e1307679f56eb54de28aaec3fb"
+"checksum actix-utils 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6ea501068a0173533704be321f149853f702d9e3c3ce9d57e7a96d94b1ab5aca"
+"checksum actix-web 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0147b2fd52ced64145c8370af627f12f098222a1c6ba67d021e21cd0d806f574"
+"checksum actix-web-actors 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "008c1b686048a16fef4ef2fc6b6e5fcf5f29829891ad87fc0848ade26b285627"
+"checksum actix-web-codegen 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe9e3cdec1e645b675f354766e0688c5705021c85ab3cf739be1c8999b91c76"
+"checksum actix_derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c"
+"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum aho-corasick 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "36b7aa1ccb7d7ea3f437cf025a2ab1c47cc6c1bc9fc84918ff449def12f5e282"
+"checksum arc-swap 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bc4662175ead9cd84451d5c35070517777949a2ed84551764129cedb88384841"
"checksum ascii_utils 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a"
-"checksum async-trait 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d"
-"checksum attohttpc 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "93610ce1c035e8a273fe56a19852e42798f3c019ca2726e52d2971197f116525"
-"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
-"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
-"checksum awc 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7601d4d1d7ef2335d6597a41b5fe069f6ab799b85f53565ab390e7b7065aac5"
-"checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e"
-"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118"
+"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+"checksum autocfg 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "22130e92352b948e7e82a49cdb0aa94f2211761117f29e052dd397c1ac33542b"
+"checksum awc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4c4763e6aa29a801d761dc3464f081d439ea5249ba90c3c3bdfc8dd3f739d233"
+"checksum backtrace 0.3.33 (registry+https://github.com/rust-lang/crates.io-index)" = "88fb679bc9af8fa639198790a77f52d345fe13656c08b43afa9424c206b731c6"
+"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
-"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
-"checksum base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3"
"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
-"checksum bcrypt 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f02d7d008a57bcb2251ba115b803934e02315edbde9a861c88713493e381b63"
-"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+"checksum bcrypt 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4fd6a91ff640809cfab4ea74312a892238a7bbae53adbf717b71122deb0c85"
+"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
"checksum block-cipher-trait 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774"
-"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
"checksum blowfish 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6aeb80d00f2688459b8542068abd974cfb101e7a82182414a99b5026c0d85cc3"
"checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd"
"checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e"
"checksum bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8"
-"checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187"
-"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
-"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
-"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
-"checksum bytestring 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fc7c05fa5172da78a62d9949d662d2ac89d4cc7355d7b49adee5163f1fb3f363"
-"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
-"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
-"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
+"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
+"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+"checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
+"checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d"
+"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
+"checksum chrono 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "77d81f58b7301084de3b958691458a53c3f7e0b1d702f77e550b6a88e3a88abe"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-"checksum comrak 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e17058cc536cf290563e88787d7b9e6030ce4742943017cc2ffb71f88034021c"
-"checksum config 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "19b076e143e1d9538dde65da30f8481c2a6c44040edb8e02b9bf1351edb92ce3"
+"checksum config 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9107d78ed62b3fa5a86e7d18e647abed48cfd8f8fab6c72f4cdb982d196f7e6"
"checksum copyless 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6ff9c56c9fb2a49c05ef0e431485a22400af20d33226dc0764d891d09e724127"
-"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
-"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
+"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
+"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
-"checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061"
-"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
-"checksum darling 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
-"checksum darling_core 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
-"checksum darling_macro 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
-"checksum derive_builder 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0"
-"checksum derive_builder_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef"
-"checksum derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2323f3f47db9a0e77ce7a300605d8d2098597fc451ed1a97bb1f6411bb550a7"
-"checksum diesel 1.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "33d7ca63eb2efea87a7f56a283acc49e2ce4b2bd54adf7465dc1d81fef13d8fc"
-"checksum diesel_derives 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
+"checksum crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f0ed1a4de2235cabda8558ff5840bffb97fcb64c97827f354a451307df5f72b"
+"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c"
+"checksum darling 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fcfbcb0c5961907597a7d1148e3af036268f2b773886b8bb3eeb1e1281d3d3d6"
+"checksum darling_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6afc018370c3bff3eb51f89256a6bdb18b4fdcda72d577982a14954a7a0b402c"
+"checksum darling_macro 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c6d8dac1c6f1d29a41c4712b4400f878cb4fcc4c7628f298dd75038e024998d1"
+"checksum derive_builder 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ac53fa6a3cda160df823a9346442525dcaf1e171999a1cf23e67067e4fd64d4"
+"checksum derive_builder_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0288a23da9333c246bb18c143426074a6ae96747995c5819d2947b64cd942b37"
+"checksum derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839"
+"checksum derive_more 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a141330240c921ec6d074a3e188a7c7ef95668bb95e7d44fa0e5778ec2a7afe"
+"checksum diesel 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d24935ba50c4a8dc375a0fd1f8a2ba6bdbdc4125713126a74b965d6a01a06d7"
+"checksum diesel_derives 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62a27666098617d52c487a41f70de23d44a1dc1f3aa5877ceba2790fb1f1cab4"
"checksum diesel_migrations 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c"
-"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
-"checksum dotenv 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
-"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3"
-"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+"checksum docopt 0.6.86 (registry+https://github.com/rust-lang/crates.io-index)" = "4a7ef30445607f6fc8720f0a0a2c7442284b629cf0d049286860fae23e71c4d9"
+"checksum dotenv 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4424bad868b0ffe6ae351ee463526ba625bbca817978293bbe6bb7dc1804a175"
+"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d"
+"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
+"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
"checksum email 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)" = "91549a51bb0241165f13d57fc4c72cef063b4088fb078b019ecbf464a45f22e4"
"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
@@ -2884,119 +2796,113 @@ dependencies = [
"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
-"checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28"
-"checksum entities 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca"
-"checksum enum-as-inner 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bc4bfcfacb61d231109d1d55202c1f33263319668b168843e02ad4652725ec9c"
-"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
-"checksum failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
-"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231"
-"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+"checksum encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)" = "4155785c79f2f6701f185eb2e6b4caf0555ec03477cb4c70db67b465311620ed"
+"checksum enum-as-inner 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3d58266c97445680766be408285e798d3401c6d4c378ec5552e78737e681e37d"
+"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
+"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
+"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
"checksum fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)" = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4"
-"checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
+"checksum flate2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "550934ad4808d5d39365e5d61727309bf18b3b02c6c56b729cb92e7dd84bc3d8"
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
-"checksum futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780"
-"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8"
-"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a"
-"checksum futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba"
-"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6"
-"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7"
-"checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6"
-"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27"
-"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5"
-"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+"checksum futures 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "45dc39533a6cae6da2b56da48edae506bb767ec07370f86f70fc062e9d435869"
+"checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
-"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
-"checksum h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42"
+"checksum getrandom 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e65cce4e5084b14874c4e7097f38cab54f47ee554f9194673456ea379dcc4c55"
+"checksum h2 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "a539b63339fbbb00e081e84b6e11bd1d9634a82d91da2984a18ac74a8823f392"
+"checksum hashbrown 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18"
+"checksum hashbrown 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353"
"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
-"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
+"checksum hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0849d73a64ec77d1c8354aff489cf31943c4b4d3716de1eabfba572c70fde530"
"checksum hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e"
-"checksum hostname 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
"checksum htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163"
-"checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9"
+"checksum http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "eed324f0f0daf6ec10c474f150505af2c143f251722bf9dbd1261bd1f2ee2c1a"
"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
-"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114"
"checksum ident_case 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
-"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
-"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
-"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d"
+"checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08"
"checksum ipconfig 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa79fa216fbe60834a9c0737d7fcd30425b32d1c58854663e24d4c4b328ed83f"
-"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
-"checksum js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055"
-"checksum jsonwebtoken 7.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d11f9e80a85927748a334df8e4f6782a04033517bb28f3863a563daad882da7f"
+"checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1"
+"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
+"checksum jsonwebtoken 6.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a81d1812d731546d2614737bee92aa071d37e9afa1409bc374da9e5e70e70b22"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
-"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum lettre 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bf43f3202a879fbdab4ecafec3349b0139f81d31c626246d53bcbb546253ffaa"
-"checksum lettre_email 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fd02480f8dcf48798e62113974d6ccca2129a51d241fa20f1ea349c8a42559d5"
-"checksum lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890"
-"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
+"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
+"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
+"checksum lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c66afaa5dfadbb81d4e00fd1d1ab057c7cd4c799c5a44e0009386d553587e728"
+"checksum lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbb68ca999042d965476e47bbdbacd52db0927348b6f8062c44dd04a3b1fd43b"
+"checksum libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d44e80633f007889c7eff624b709ab43c92d708caad982295768a7b13ca3b5eb"
"checksum linked-hash-map 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd"
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
-"checksum lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
-"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
+"checksum lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff"
+"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc"
+"checksum log 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c275b6ad54070ac2d665eef9197db647b32239c9d244bfb6f041a766d00da5b3"
"checksum lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
-"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
-"checksum match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
-"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
-"checksum migrations_internals 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860"
-"checksum migrations_macros 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c"
-"checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
-"checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212"
-"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
-"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
+"checksum migrations_internals 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8089920229070f914b9ce9b07ef60e175b2b9bc2d35c3edd8bf4433604e863b9"
+"checksum migrations_macros 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1664412abf7db2b8a6d58be42a38b099780cc542b5b350383b805d88932833fe"
+"checksum mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425"
+"checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed"
+"checksum miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9e3ae51cea1576ceba0dde3d484d30e6e5b86dee0b2d412fe3a16a15c98202"
+"checksum miniz_oxide 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c061edee74a88eb35d876ce88b94d77a0448a201de111c244b70d047f5820516"
+"checksum miniz_oxide_c_api 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6c675792957b0d19933816c4e1d56663c341dd9bfa31cb2140ff2267c1d8ecf4"
+"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23"
"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
-"checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d"
+"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
-"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
-"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
-"checksum num-bigint 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
-"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
-"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
-"checksum num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
-"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
-"checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd"
+"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
+"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
+"checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409"
+"checksum openssl 0.10.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2f372b2b53ce10fb823a337aaa674e3a7d072b957c6264d0f4ff0bd86e657449"
"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
-"checksum openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)" = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de"
-"checksum parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"
-"checksum parking_lot_core 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e136c1904604defe99ce5fd71a28d473fa60a12255d511aa78a9ddf11237aeb"
-"checksum pem 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1581760c757a756a41f0ee3ff01256227bdf64cb752839779b95ffb01c59793"
-"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
-"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
-"checksum pest_generator 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
-"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
-"checksum pin-project 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6f6a7f5eee6292c559c793430c55c00aea9d3b3d1905e855806ca4d7253426a2"
-"checksum pin-project-internal 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "8988430ce790d8682672117bc06dda364c0be32d3abd738234f19f3240bad99a"
-"checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae"
-"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
-"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
-"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
+"checksum openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c977d08e1312e2f7e4b86f9ebaa0ed3b19d1daff75fae88bbb88108afbd801fc"
+"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13"
+"checksum parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc"
+"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337"
+"checksum parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa7767817701cce701d5585b9c4db3cdd02086398322c1d7e8bf5094a96a2ce7"
+"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9"
+"checksum parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cb88cb1cb3790baa6776844f968fea3be44956cf184fa1be5a03341f5491278c"
+"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
+"checksum parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1"
+"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+"checksum pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "72d5370d90f49f70bd033c3d75e87fc529fbfff9d6f7cccef07d6170079d91ea"
+"checksum ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b"
"checksum pq-sys 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda"
-"checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63"
-"checksum proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694"
-"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
-"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-"checksum quick-xml 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fe1e430bdcf30c9fdc25053b9c459bb1a4672af4617b6c783d7d91dc17c6bbb0"
-"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
-"checksum r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1497e40855348e4a8a40767d8e55174bce1e445a3ac9254ad44ad468ee0485af"
+"checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7"
+"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
+"checksum quick-xml 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8b2062cd4735d683121dbd525f5961226936229b0ac6bbbc40b34155744a41"
+"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
+"checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8"
+"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+"checksum r2d2 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "22b5c5fc5fba064373f03887337b412e0e1562d63023393db77251146cb75553"
+"checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
-"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+"checksum rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c"
"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+"checksum rand_chacha 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e193067942ef6f485a349a113329140d0ab9e2168ce92274499bb0e9a4190d9d"
"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
-"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
+"checksum rand_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "615e683324e75af5d43d8f7a39ffe3ee4a9dc42c5c701167a71dc59c3a493aca"
"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
@@ -3006,99 +2912,105 @@ dependencies = [
"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692"
-"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6b23da8dfd98a84bd7e08700190a5d9f7d2d38abd4369dd1dae651bc40bfd2cc"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum regex-syntax 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "cd5485bf1523a9ed51c4964273f22f63f24e31632adb5dad134f488f86a3875c"
"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
-"checksum resolv-conf 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a"
-"checksum ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1ba5a8ec64ee89a76c98c549af81ff14813df09c3e6dc4766c3856da48597a0c"
-"checksum rss 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "99979205510c60f80a119dedbabd0b8426517384edf205322f8bcd51796bcef9"
-"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
+"checksum resolv-conf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b263b4aa1b5de9ffc0054a2386f96992058bb6870aab516f8cdeb8a667d56dcb"
+"checksum ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)" = "426bc186e3e95cac1e4a4be125a4aca7e84c2d616ffc02244eef36e2a60a093c"
+"checksum rss 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0706a43e890fbaf1714d495d12f69a7b34b70c6e903586d70311c2ce15ffe67"
+"checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a"
+"checksum rust-ini 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e52c148ef37f8c375d49d5a73aa70713125b7f19095948a923f80afdeb22ec2"
+"checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af"
+"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-"checksum rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1"
-"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
+"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
-"checksum schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
-"checksum scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0988d7fdf88d5e5fcf5923a0f1e8ab345f3e98ab4bc6bc45a2d5ff7f7458fbf6"
-"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-"checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
-"checksum security-framework 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535"
-"checksum security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405"
+"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
+"checksum scheduled-thread-pool 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f5de7bc31f28f8e6c28df5e1bf3d10610f5fdc14cc95f272853512c70a2bd779"
+"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
+"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
+"checksum security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eee63d0f4a9ec776eeb30e220f0bc1e092c3ad744b2a379e3993070364d3adc2"
+"checksum security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9636f8989cbf61385ae4824b98c1aaa54c994d7d8b41f11c601ed799f0549a56"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8"
-"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
-"checksum serde-hjson 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8"
-"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
-"checksum serde_json 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd"
+"checksum serde 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)" = "d46b3dfedb19360a74316866cef04687cd4d6a70df8e6a506c63512790769b72"
+"checksum serde-hjson 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0b833c5ad67d52ced5f5938b2980f32a9c1c5ef047f0b4fb3127e7a423c76153"
+"checksum serde_derive 1.0.97 (registry+https://github.com/rust-lang/crates.io-index)" = "c22a0820adfe2f257b098714323563dd06426502abbbce4f51b72ef544c5027f"
+"checksum serde_json 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "67f7d2e9edc3523a9c8ec8cd6ec481b3a27810aafee3e625d311febd3e656b4c"
+"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
"checksum serde_test 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5"
-"checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
-"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+"checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-"checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0"
-"checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
-"checksum simple_asn1 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2b25ecba7165254f0c97d6c22a64b1122a03634b18d20a34daf21e18f892e618"
+"checksum signal-hook 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4f61c4d59f3aaa9f61bba6450a9b80ba48362fd7d651689e7a10c453b1f6dc68"
+"checksum signal-hook-registry 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cded4ffa32146722ec54ab1f16320568465aa922aa9ab4708129599740da85d7"
+"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
-"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
-"checksum socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918"
-"checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
-"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
-"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-"checksum strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
-"checksum strum 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
-"checksum strum_macros 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
-"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
-"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
+"checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7"
+"checksum smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86"
+"checksum socket2 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "4e626972d3593207547f14bf5fc9efa4d0e7283deb73fef1dff313dae9ab8878"
+"checksum spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44363f6f51401c34e7be73db0db371c04705d35efbe9f7d6082e03a921a32c55"
+"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
+"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+"checksum strsim 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "67f84c44fbb2f91db7fef94554e6b2ac05909c9c0b0bc23bb98d3a1aebfe7f7c"
+"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
+"checksum strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1c33039533f051704951680f1adfd468fd37ac46816ded0d9ee068e60f05f"
+"checksum strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "47cd23f5c7dee395a00fa20135e2ec0fffcdfa151c56182966d7a3261343432e"
+"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
+"checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b"
+"checksum syn 0.15.40 (registry+https://github.com/rust-lang/crates.io-index)" = "bc945221ccf4a7e8c31222b9d1fc77aefdd6638eb901a6ce457a3dc29d4c31e8"
+"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
+"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f"
"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
-"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
-"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-"checksum thiserror 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "b13f926965ad00595dd129fa12823b04bbf866e9085ab0a5f2b05b850fbfc344"
-"checksum thiserror-impl 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "893582086c2f98cde18f906265a65b5030a074b1046c674ae898be6519a7f479"
-"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
-"checksum tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1"
-"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930"
-"checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
-"checksum trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2a7f3a2ab8a919f5eca52a468866a67ed7d3efa265d48a652a9a3452272b413f"
-"checksum trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f90b1502b226f8b2514c6d5b37bafa8c200d7ca4102d57dc36ee0f3b7a04a2f"
-"checksum twoway 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6b40075910de3a912adbd80b5d8bad6ad10a23eeb1f5bf9d4006839e899ba5bc"
-"checksum typed-arena 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d"
-"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
-"checksum ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
-"checksum unchecked-index 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c"
-"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f"
+"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443"
+"checksum tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f27ee0e6db01c5f0b2973824547ce7e637b2ed79b891a9677b0de9bd532b6ac"
+"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926"
+"checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce"
+"checksum tokio-signal 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "dd6dc5276ea05ce379a16de90083ec80836440d5ef8a6a39545a3207373b8296"
+"checksum tokio-sync 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2162248ff317e2bc713b261f242b69dbb838b85248ed20bb21df56d60ea4cae7"
+"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119"
+"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e"
+"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92"
+"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
+"checksum trust-dns-proto 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5559ebdf6c2368ddd11e20b11d6bbaf9e46deb803acd7815e93f5a7b4a6d2901"
+"checksum trust-dns-resolver 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c9992e58dba365798803c0b91018ff6c8d3fc77e06977c4539af2a6bfe0a039"
+"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
+"checksum ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa9b3b49edd3468c0e6565d85783f51af95212b6fa3986a5500954f00b460874"
+"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
+"checksum unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a84e5511b2a947f3ae965dcb29b13b7b1691b6e7332cf5dbc1744138d5acb7f6"
"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
-"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
-"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
-"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
-"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-"checksum unicode_categories 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
-"checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece"
-"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
+"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426"
+"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
+"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
+"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+"checksum untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f"
+"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9d50aa7650df78abf942826607c62468ce18d9019673d4a2ebe1865dbb96ffde"
"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
-"checksum v_escape 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6"
-"checksum v_escape_derive 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c2ca2a14bc3fc5b64d188b087a7d3a927df87b152e941ccfbc66672e20c467ae"
-"checksum v_htmlescape 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41"
-"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
-"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+"checksum v_escape 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8865501b78eef9193c1b45486acf18ba889e5662eba98854d6fc59d8ecf3542d"
+"checksum v_escape_derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "306896ff4b75998501263a1dc000456de442e21d68fe8c8bdf75c66a33a58e23"
+"checksum v_htmlescape 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7fbbe0fa88dd36f9c8cf61a218d4b953ba669de4d0785832f33cc72bd081e1be"
+"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
-"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
-"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-"checksum wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f"
-"checksum wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd"
-"checksum wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4"
-"checksum wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931"
-"checksum wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639"
-"checksum web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb"
-"checksum webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef"
-"checksum webpki-roots 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"
"checksum widestring 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effc0e4ff8085673ea7b9b2e3c73f6bd4d118810c9009ed8f1e16bd96c331db6"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
-"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
+"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e"
+"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba"
+"checksum winreg 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73f1f3c6c4d3cab118551b96c476a2caab920701e28875b64a458f2ecb96ec9d"
"checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e"
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 43933e53..f7517153 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -1,43 +1,34 @@
[package]
name = "lemmy_server"
version = "0.0.1"
-authors = ["Dessalines "]
+authors = ["Dessalines "]
edition = "2018"
-[profile.release]
-lto = true
-
[dependencies]
-diesel = { version = "1.4.2", features = ["postgres","chrono", "r2d2", "64-column-tables"] }
+diesel = { version = "1.4.2", features = ["postgres","chrono", "r2d2"] }
diesel_migrations = "1.4.0"
-dotenv = "0.15.0"
-bcrypt = "0.7.0"
-activitypub = "0.2.0"
-chrono = "0.4.7"
-failure = "0.1.8"
-serde_json = "1.0.52"
-serde = "1.0.105"
-actix = "0.9.0"
-actix-web = "2.0.0"
-actix-files = "0.2.1"
-actix-web-actors = "2.0.0"
-actix-rt = "1.1.1"
-log = "0.4.0"
-env_logger = "0.7.1"
-rand = "0.7.3"
-strum = "0.18.0"
-strum_macros = "0.18.0"
-jsonwebtoken = "7.0.1"
-regex = "1.3.5"
+dotenv = "0.14.1"
+bcrypt = "0.5.0"
+activitypub = "0.1.5"
+chrono = { version = "0.4.7", features = ["serde"] }
+failure = "0.1.5"
+serde_json = { version = "1.0.40", features = ["preserve_order"]}
+serde = { version = "1.0.94", features = ["derive"] }
+actix = "0.8.3"
+actix-web = "1.0"
+actix-files = "0.1.3"
+actix-web-actors = "1.0"
+env_logger = "0.6.2"
+rand = "0.7.0"
+strum = "0.15.0"
+strum_macros = "0.15.0"
+jsonwebtoken = "6.0.1"
+regex = "1.1.9"
lazy_static = "1.3.0"
-lettre = "0.9.3"
-lettre_email = "0.9.4"
-sha2 = "0.8.1"
-rss = "1.9.0"
+lettre = "0.9.2"
+lettre_email = "0.9.2"
+rust-crypto = "^0.2"
+rss = "1.8.0"
htmlescape = "0.3.1"
-config = {version = "0.10.1", default-features = false, features = ["hjson"] }
-percent-encoding = "2.1.0"
-attohttpc = { version = "0.14.0", default-features = false, features = ["tls-rustls"] }
-comrak = "0.7"
-tokio = "0.2.20"
-futures = "0.3.4"
+config = "0.9.3"
+hjson = "0.8.2"
diff --git a/server/clean.sh b/server/clean.sh
deleted file mode 100755
index 3666a729..00000000
--- a/server/clean.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-cargo update
-cargo fmt
-cargo check
-cargo clippy
-cargo outdated -R
diff --git a/server/config/defaults.hjson b/server/config/defaults.hjson
index 97b9429c..e65bbcf4 100644
--- a/server/config/defaults.hjson
+++ b/server/config/defaults.hjson
@@ -1,57 +1,41 @@
{
-# # optional: parameters for automatic configuration of new instance (only used at first start)
-# setup: {
-# # username for the admin user
-# admin_username: ""
-# # password for the admin user
-# admin_password: ""
-# # optional: email for the admin user (can be omitted and set later through the website)
-# admin_email: ""
-# # name of the site (can be changed later)
-# site_name: ""
-# }
# settings related to the postgresql database
database: {
- # username to connect to postgres
- user: "lemmy"
- # password to connect to postgres
- password: "password"
- # host where postgres is running
- host: "localhost"
- # port where postgres can be accessed
- port: 5432
- # name of the postgres database for lemmy
- database: "lemmy"
- # maximum number of active sql connections
- pool_size: 5
- }
+ # username to connect to postgres
+ user: "lemmy"
+ # password to connect to postgres
+ password: "password"
+ # host where postgres is running
+ host: "localhost"
+ # port where postgres can be accessed
+ port: 5432
+ # name of the postgres database for lemmy
+ database: "lemmy"
+ # maximum number of active sql connections
+ pool_size: 5
+ }
# the domain name of your instance (eg "dev.lemmy.ml")
- hostname: "my_domain"
+ hostname: "rrr"
# address where lemmy should listen for incoming requests
bind: "0.0.0.0"
# port where lemmy should listen for incoming requests
port: 8536
# json web token for authorization between server and client
jwt_secret: "changeme"
- # The dir for the front end
- front_end_dir: "../ui/dist"
- # whether to enable activitypub federation. this feature is in alpha, do not enable in production, as might
- # cause problems like remote instances fetching and permanently storing bad data.
- federation_enabled: false
# rate limits for various user actions, by user ip
rate_limit: {
# maximum number of messages created in interval
- message: 180
+ message: 30,
# interval length for message limit
- message_per_second: 60
+ message_per_second: 60,
# maximum number of posts created in interval
- post: 6
+ post: 6,
# interval length for post limit
- post_per_second: 600
+ post_per_second: 600,
# maximum number of registrations in interval
- register: 3
+ register: 3,
# interval length for registration limit
- register_per_second: 3600
+ register_per_second: 3600,
}
# # email sending configuration
# email: {
diff --git a/server/db-init.sh b/server/db-init.sh
deleted file mode 100755
index a2ad77b5..00000000
--- a/server/db-init.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/sh
-
-# Default configurations
-username=lemmy
-dbname=lemmy
-port=5432
-
-yes_no_prompt_invalid() {
- echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2
-}
-
-print_config() {
- echo " database name: $dbname"
- echo " username: $username"
- echo " port: $port"
-}
-
-ask_for_db_config() {
- echo "The default database configuration is:"
- print_config
- echo
-
- default_config_final=0
- default_config_valid=0
- while [ "$default_config_valid" == 0 ]
- do
- read -p "Use this configuration (y/n)? " default_config
- case "$default_config" in
- [yY]* ) default_config_valid=1; default_config_final=1;;
- [nN]* ) default_config_valid=1; default_config_final=0;;
- * ) yes_no_prompt_invalid;;
- esac
- echo
- done
-
- if [ "$default_config_final" == 0 ]
- then
- config_ok_final=0
- while [ "$config_ok_final" == 0 ]
- do
- read -p "Database name: " dbname
- read -p "Username: " username
- read -p "Port: " port
- #echo
-
- #echo "The database configuration is:"
- #print_config
- #echo
-
- config_ok_valid=0
- while [ "$config_ok_valid" == 0 ]
- do
- read -p "Use this configuration (y/n)? " config_ok
- case "$config_ok" in
- [yY]* ) config_ok_valid=1; config_ok_final=1;;
- [nN]* ) config_ok_valid=1; config_ok_final=0;;
- * ) yes_no_prompt_invalid;;
- esac
- echo
- done
- done
- fi
-}
-
-ask_for_password() {
- password=""
- password_confirm=""
- password_valid=0
- while [ "$password_valid" == 0 ]
- do
- read -p "Enter database password: " -s password
- echo
-
- read -p "Verify database password: " -s password_confirm
- echo
- echo
-
- # Start the loop from the top if either check fails
- if [ -z "$password" ]
- then
- echo "Error: Password cannot be empty." 1>&2
- echo
- continue
- fi
- if [ "$password" != "$password_confirm" ]
- then
- echo "Error: Passwords don't match." 1>&2
- echo
- continue
- fi
-
- # Set the password_valid variable to break out of the loop
- password_valid=1
- done
-}
-
-ask_for_db_config
-
-ask_for_password
-
-psql -c "CREATE USER $username WITH PASSWORD '$password' SUPERUSER;" -U postgres
-psql -c "CREATE DATABASE $dbname WITH OWNER $username;" -U postgres
-export LEMMY_DATABASE_URL=postgres://$username:$password@localhost:$port/$dbname
-
-echo "The database URL is $LEMMY_DATABASE_URL"
-
diff --git a/server/migrations/2019-12-29-164820_add_avatar/down.sql b/server/migrations/2019-12-29-164820_add_avatar/down.sql
deleted file mode 100644
index 74b4146d..00000000
--- a/server/migrations/2019-12-29-164820_add_avatar/down.sql
+++ /dev/null
@@ -1,224 +0,0 @@
--- the views
-drop view user_mention_view;
-drop view reply_view;
-drop view comment_view;
-drop view user_view;
-
--- user
-create view user_view as
-select id,
-name,
-fedi_name,
-admin,
-banned,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
--- post
--- Recreate the view
-drop view post_view;
-create view post_view as
-with all_post as
-(
- select
- p.*,
- (select u.banned from user_ u where p.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where p.creator_id = user_.id) as creator_name,
- (select name from community where p.community_id = community.id) as community_name,
- (select removed from community c where p.community_id = c.id) as community_removed,
- (select deleted from community c where p.community_id = c.id) as community_deleted,
- (select nsfw from community c where p.community_id = c.id) as community_nsfw,
- (select count(*) from comment where comment.post_id = p.id) as number_of_comments,
- coalesce(sum(pl.score), 0) as score,
- count (case when pl.score = 1 then 1 else null end) as upvotes,
- count (case when pl.score = -1 then 1 else null end) as downvotes,
- hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
- from post p
- left join post_like pl on p.id = pl.post_id
- group by p.id
-)
-
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
--- community
-
-drop view community_view;
-create view community_view as
-with all_community as
-(
- select *,
- (select name from user_ u where c.creator_id = u.id) as creator_name,
- (select name from category ct where c.category_id = ct.id) as category_name,
- (select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
- (select count(*) from post p where p.community_id = c.id) as number_of_posts,
- (select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
- hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
- from community c
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
--- Reply and comment view
-create view comment_view as
-with all_comment as
-(
- select
- c.*,
- (select community_id from post p where p.id = c.post_id),
- (select u.banned from user_ u where c.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where c.creator_id = user_.id) as creator_name,
- coalesce(sum(cl.score), 0) as score,
- count (case when cl.score = 1 then 1 else null end) as upvotes,
- count (case when cl.score = -1 then 1 else null end) as downvotes
- from comment c
- left join comment_like cl on c.id = cl.comment_id
- group by c.id
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
--- community tables
-drop view community_moderator_view;
-drop view community_follower_view;
-drop view community_user_ban_view;
-drop view site_view;
-
-create view community_moderator_view as
-select *,
-(select name from user_ u where cm.user_id = u.id) as user_name,
-(select name from community c where cm.community_id = c.id) as community_name
-from community_moderator cm;
-
-create view community_follower_view as
-select *,
-(select name from user_ u where cf.user_id = u.id) as user_name,
-(select name from community c where cf.community_id = c.id) as community_name
-from community_follower cf;
-
-create view community_user_ban_view as
-select *,
-(select name from user_ u where cm.user_id = u.id) as user_name,
-(select name from community c where cm.community_id = c.id) as community_name
-from community_user_ban cm;
-
-create view site_view as
-select *,
-(select name from user_ u where s.creator_id = u.id) as creator_name,
-(select count(*) from user_) as number_of_users,
-(select count(*) from post) as number_of_posts,
-(select count(*) from comment) as number_of_comments,
-(select count(*) from community) as number_of_communities
-from site s;
-
-alter table user_ rename column avatar to icon;
-alter table user_ alter column icon type bytea using icon::bytea;
diff --git a/server/migrations/2019-12-29-164820_add_avatar/up.sql b/server/migrations/2019-12-29-164820_add_avatar/up.sql
deleted file mode 100644
index f9265154..00000000
--- a/server/migrations/2019-12-29-164820_add_avatar/up.sql
+++ /dev/null
@@ -1,234 +0,0 @@
--- Rename to avatar
-alter table user_ rename column icon to avatar;
-alter table user_ alter column avatar type text;
-
--- Rebuild nearly all the views, to include the creator avatars
-
--- user
-drop view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-fedi_name,
-admin,
-banned,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
--- post
--- Recreate the view
-drop view post_view;
-create view post_view as
-with all_post as
-(
- select
- p.*,
- (select u.banned from user_ u where p.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where p.creator_id = user_.id) as creator_name,
- (select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
- (select name from community where p.community_id = community.id) as community_name,
- (select removed from community c where p.community_id = c.id) as community_removed,
- (select deleted from community c where p.community_id = c.id) as community_deleted,
- (select nsfw from community c where p.community_id = c.id) as community_nsfw,
- (select count(*) from comment where comment.post_id = p.id) as number_of_comments,
- coalesce(sum(pl.score), 0) as score,
- count (case when pl.score = 1 then 1 else null end) as upvotes,
- count (case when pl.score = -1 then 1 else null end) as downvotes,
- hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
- from post p
- left join post_like pl on p.id = pl.post_id
- group by p.id
-)
-
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-
--- community
-drop view community_view;
-create view community_view as
-with all_community as
-(
- select *,
- (select name from user_ u where c.creator_id = u.id) as creator_name,
- (select avatar from user_ u where c.creator_id = u.id) as creator_avatar,
- (select name from category ct where c.category_id = ct.id) as category_name,
- (select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
- (select count(*) from post p where p.community_id = c.id) as number_of_posts,
- (select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
- hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
- from community c
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
--- reply and comment view
-drop view reply_view;
-drop view user_mention_view;
-drop view comment_view;
-create view comment_view as
-with all_comment as
-(
- select
- c.*,
- (select community_id from post p where p.id = c.post_id),
- (select u.banned from user_ u where c.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where c.creator_id = user_.id) as creator_name,
- (select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
- coalesce(sum(cl.score), 0) as score,
- count (case when cl.score = 1 then 1 else null end) as upvotes,
- count (case when cl.score = -1 then 1 else null end) as downvotes
- from comment c
- left join comment_like cl on c.id = cl.comment_id
- group by c.id
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
--- community views
-drop view community_moderator_view;
-drop view community_follower_view;
-drop view community_user_ban_view;
-drop view site_view;
-
-create view community_moderator_view as
-select *,
-(select name from user_ u where cm.user_id = u.id) as user_name,
-(select avatar from user_ u where cm.user_id = u.id),
-(select name from community c where cm.community_id = c.id) as community_name
-from community_moderator cm;
-
-create view community_follower_view as
-select *,
-(select name from user_ u where cf.user_id = u.id) as user_name,
-(select avatar from user_ u where cf.user_id = u.id),
-(select name from community c where cf.community_id = c.id) as community_name
-from community_follower cf;
-
-create view community_user_ban_view as
-select *,
-(select name from user_ u where cm.user_id = u.id) as user_name,
-(select avatar from user_ u where cm.user_id = u.id),
-(select name from community c where cm.community_id = c.id) as community_name
-from community_user_ban cm;
-
-create view site_view as
-select *,
-(select name from user_ u where s.creator_id = u.id) as creator_name,
-(select avatar from user_ u where s.creator_id = u.id) as creator_avatar,
-(select count(*) from user_) as number_of_users,
-(select count(*) from post) as number_of_posts,
-(select count(*) from comment) as number_of_comments,
-(select count(*) from community) as number_of_communities
-from site s;
diff --git a/server/migrations/2020-01-01-200418_add_email_to_user_view/down.sql b/server/migrations/2020-01-01-200418_add_email_to_user_view/down.sql
deleted file mode 100644
index 92f771f8..00000000
--- a/server/migrations/2020-01-01-200418_add_email_to_user_view/down.sql
+++ /dev/null
@@ -1,15 +0,0 @@
--- user
-drop view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-fedi_name,
-admin,
-banned,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
diff --git a/server/migrations/2020-01-01-200418_add_email_to_user_view/up.sql b/server/migrations/2020-01-01-200418_add_email_to_user_view/up.sql
deleted file mode 100644
index 59972dfb..00000000
--- a/server/migrations/2020-01-01-200418_add_email_to_user_view/up.sql
+++ /dev/null
@@ -1,16 +0,0 @@
--- user
-drop view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
diff --git a/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/down.sql b/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/down.sql
deleted file mode 100644
index ec061223..00000000
--- a/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/down.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Drop the columns
-drop view user_view;
-alter table user_ drop column show_avatars;
-alter table user_ drop column send_notifications_to_email;
-
--- Rebuild the view
-create view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
diff --git a/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/up.sql b/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/up.sql
deleted file mode 100644
index 21f0aff4..00000000
--- a/server/migrations/2020-01-02-172755_add_show_avatar_and_email_notifications_to_user/up.sql
+++ /dev/null
@@ -1,22 +0,0 @@
--- Add columns
-alter table user_ add column show_avatars boolean default true not null;
-alter table user_ add column send_notifications_to_email boolean default false not null;
-
--- Rebuild the user_view
-drop view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-show_avatars,
-send_notifications_to_email,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
diff --git a/server/migrations/2020-01-11-012452_add_indexes/down.sql b/server/migrations/2020-01-11-012452_add_indexes/down.sql
deleted file mode 100644
index ad674c50..00000000
--- a/server/migrations/2020-01-11-012452_add_indexes/down.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-drop index idx_post_creator;
-drop index idx_post_community;
-
-drop index idx_post_like_post;
-drop index idx_post_like_user;
-
-drop index idx_comment_creator;
-drop index idx_comment_parent;
-drop index idx_comment_post;
-
-drop index idx_comment_like_comment;
-drop index idx_comment_like_user;
-drop index idx_comment_like_post;
-
-drop index idx_community_creator;
-drop index idx_community_category;
diff --git a/server/migrations/2020-01-11-012452_add_indexes/up.sql b/server/migrations/2020-01-11-012452_add_indexes/up.sql
deleted file mode 100644
index 911f0875..00000000
--- a/server/migrations/2020-01-11-012452_add_indexes/up.sql
+++ /dev/null
@@ -1,17 +0,0 @@
--- Go through all the tables joins, optimize every view, CTE, etc.
-create index idx_post_creator on post (creator_id);
-create index idx_post_community on post (community_id);
-
-create index idx_post_like_post on post_like (post_id);
-create index idx_post_like_user on post_like (user_id);
-
-create index idx_comment_creator on comment (creator_id);
-create index idx_comment_parent on comment (parent_id);
-create index idx_comment_post on comment (post_id);
-
-create index idx_comment_like_comment on comment_like (comment_id);
-create index idx_comment_like_user on comment_like (user_id);
-create index idx_comment_like_post on comment_like (post_id);
-
-create index idx_community_creator on community (creator_id);
-create index idx_community_category on community (category_id);
diff --git a/server/migrations/2020-01-13-025151_create_materialized_views/down.sql b/server/migrations/2020-01-13-025151_create_materialized_views/down.sql
deleted file mode 100644
index 39985ab5..00000000
--- a/server/migrations/2020-01-13-025151_create_materialized_views/down.sql
+++ /dev/null
@@ -1,223 +0,0 @@
--- functions and triggers
-drop trigger refresh_user on user_;
-drop function refresh_user();
-drop trigger refresh_post on post;
-drop function refresh_post();
-drop trigger refresh_post_like on post_like;
-drop function refresh_post_like();
-drop trigger refresh_community on community;
-drop function refresh_community();
-drop trigger refresh_community_follower on community_follower;
-drop function refresh_community_follower();
-drop trigger refresh_community_user_ban on community_user_ban;
-drop function refresh_community_user_ban();
-drop trigger refresh_comment on comment;
-drop function refresh_comment();
-drop trigger refresh_comment_like on comment_like;
-drop function refresh_comment_like();
-
--- post
--- Recreate the view
-drop view post_view;
-create view post_view as
-with all_post as
-(
- select
- p.*,
- (select u.banned from user_ u where p.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where p.creator_id = user_.id) as creator_name,
- (select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
- (select name from community where p.community_id = community.id) as community_name,
- (select removed from community c where p.community_id = c.id) as community_removed,
- (select deleted from community c where p.community_id = c.id) as community_deleted,
- (select nsfw from community c where p.community_id = c.id) as community_nsfw,
- (select count(*) from comment where comment.post_id = p.id) as number_of_comments,
- coalesce(sum(pl.score), 0) as score,
- count (case when pl.score = 1 then 1 else null end) as upvotes,
- count (case when pl.score = -1 then 1 else null end) as downvotes,
- hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
- from post p
- left join post_like pl on p.id = pl.post_id
- group by p.id
-)
-
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-
--- user
-drop materialized view user_mview;
-drop view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-show_avatars,
-send_notifications_to_email,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
--- community
-drop view community_mview;
-drop materialized view community_aggregates_mview;
-drop view community_view;
-drop view community_aggregates_view;
-create view community_view as
-with all_community as
-(
- select *,
- (select name from user_ u where c.creator_id = u.id) as creator_name,
- (select avatar from user_ u where c.creator_id = u.id) as creator_avatar,
- (select name from category ct where c.category_id = ct.id) as category_name,
- (select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
- (select count(*) from post p where p.community_id = c.id) as number_of_posts,
- (select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
- hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
- from community c
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
--- reply and comment view
-drop view reply_view;
-drop view user_mention_view;
-drop view comment_view;
-drop view comment_mview;
-drop materialized view comment_aggregates_mview;
-drop view comment_aggregates_view;
-create view comment_view as
-with all_comment as
-(
- select
- c.*,
- (select community_id from post p where p.id = c.post_id),
- (select u.banned from user_ u where c.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where c.creator_id = user_.id) as creator_name,
- (select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
- coalesce(sum(cl.score), 0) as score,
- count (case when cl.score = 1 then 1 else null end) as upvotes,
- count (case when cl.score = -1 then 1 else null end) as downvotes
- from comment c
- left join comment_like cl on c.id = cl.comment_id
- group by c.id
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
diff --git a/server/migrations/2020-01-13-025151_create_materialized_views/up.sql b/server/migrations/2020-01-13-025151_create_materialized_views/up.sql
deleted file mode 100644
index e0f206d3..00000000
--- a/server/migrations/2020-01-13-025151_create_materialized_views/up.sql
+++ /dev/null
@@ -1,437 +0,0 @@
--- post
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
-from post p
-left join post_like pl on p.id = pl.post_id
-group by p.id;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-drop view post_view;
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-
--- user_view
-drop view user_view;
-create view user_view as
-select
-u.id,
-u.name,
-u.avatar,
-u.email,
-u.fedi_name,
-u.admin,
-u.banned,
-u.show_avatars,
-u.send_notifications_to_email,
-u.published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
-create materialized view user_mview as select * from user_view;
-
-create unique index idx_user_mview_id on user_mview (id);
-
--- community
-create view community_aggregates_view as
-select c.*,
-(select name from user_ u where c.creator_id = u.id) as creator_name,
-(select avatar from user_ u where c.creator_id = u.id) as creator_avatar,
-(select name from category ct where c.category_id = ct.id) as category_name,
-(select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
-(select count(*) from post p where p.community_id = c.id) as number_of_posts,
-(select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
-hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
-from community c;
-
-create materialized view community_aggregates_mview as select * from community_aggregates_view;
-
-create unique index idx_community_aggregates_mview_id on community_aggregates_mview (id);
-
-drop view community_view;
-create view community_view as
-with all_community as
-(
- select
- ca.*
- from community_aggregates_view ca
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
-create view community_mview as
-with all_community as
-(
- select
- ca.*
- from community_aggregates_mview ca
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
-
--- reply and comment view
-create view comment_aggregates_view as
-select
-c.*,
-(select community_id from post p where p.id = c.post_id),
-(select u.banned from user_ u where c.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where c.creator_id = user_.id) as creator_name,
-(select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
-coalesce(sum(cl.score), 0) as score,
-count (case when cl.score = 1 then 1 else null end) as upvotes,
-count (case when cl.score = -1 then 1 else null end) as downvotes
-from comment c
-left join comment_like cl on c.id = cl.comment_id
-group by c.id;
-
-create materialized view comment_aggregates_mview as select * from comment_aggregates_view;
-
-create unique index idx_comment_aggregates_mview_id on comment_aggregates_mview (id);
-
-drop view reply_view;
-drop view user_mention_view;
-drop view comment_view;
-
-create view comment_view as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_view ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view comment_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
--- user
-create or replace function refresh_user()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently user_mview;
- refresh materialized view concurrently comment_aggregates_mview; -- cause of bans
- refresh materialized view concurrently post_aggregates_mview;
- return null;
-end $$;
-
-create trigger refresh_user
-after insert or update or delete or truncate
-on user_
-for each statement
-execute procedure refresh_user();
-
--- post
-create or replace function refresh_post()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_aggregates_mview;
- refresh materialized view concurrently user_mview;
- return null;
-end $$;
-
-create trigger refresh_post
-after insert or update or delete or truncate
-on post
-for each statement
-execute procedure refresh_post();
-
--- post_like
-create or replace function refresh_post_like()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_aggregates_mview;
- refresh materialized view concurrently user_mview;
- return null;
-end $$;
-
-create trigger refresh_post_like
-after insert or update or delete or truncate
-on post_like
-for each statement
-execute procedure refresh_post_like();
-
--- community
-create or replace function refresh_community()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_aggregates_mview;
- refresh materialized view concurrently community_aggregates_mview;
- refresh materialized view concurrently user_mview;
- return null;
-end $$;
-
-create trigger refresh_community
-after insert or update or delete or truncate
-on community
-for each statement
-execute procedure refresh_community();
-
--- community_follower
-create or replace function refresh_community_follower()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently community_aggregates_mview;
- refresh materialized view concurrently post_aggregates_mview;
- return null;
-end $$;
-
-create trigger refresh_community_follower
-after insert or update or delete or truncate
-on community_follower
-for each statement
-execute procedure refresh_community_follower();
-
--- community_user_ban
-create or replace function refresh_community_user_ban()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently comment_aggregates_mview;
- refresh materialized view concurrently post_aggregates_mview;
- return null;
-end $$;
-
-create trigger refresh_community_user_ban
-after insert or update or delete or truncate
-on community_user_ban
-for each statement
-execute procedure refresh_community_user_ban();
-
--- comment
-create or replace function refresh_comment()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_aggregates_mview;
- refresh materialized view concurrently comment_aggregates_mview;
- refresh materialized view concurrently community_aggregates_mview;
- refresh materialized view concurrently user_mview;
- return null;
-end $$;
-
-create trigger refresh_comment
-after insert or update or delete or truncate
-on comment
-for each statement
-execute procedure refresh_comment();
-
--- comment_like
-create or replace function refresh_comment_like()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently comment_aggregates_mview;
- refresh materialized view concurrently user_mview;
- return null;
-end $$;
-
-create trigger refresh_comment_like
-after insert or update or delete or truncate
-on comment_like
-for each statement
-execute procedure refresh_comment_like();
diff --git a/server/migrations/2020-01-21-001001_create_private_message/down.sql b/server/migrations/2020-01-21-001001_create_private_message/down.sql
deleted file mode 100644
index 0d951e3e..00000000
--- a/server/migrations/2020-01-21-001001_create_private_message/down.sql
+++ /dev/null
@@ -1,34 +0,0 @@
--- Drop the triggers
-drop trigger refresh_private_message on private_message;
-drop function refresh_private_message();
-
--- Drop the view and table
-drop view private_message_view cascade;
-drop table private_message;
-
--- Rebuild the old views
-drop view user_view cascade;
-create view user_view as
-select
-u.id,
-u.name,
-u.avatar,
-u.email,
-u.fedi_name,
-u.admin,
-u.banned,
-u.show_avatars,
-u.send_notifications_to_email,
-u.published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
-create materialized view user_mview as select * from user_view;
-
-create unique index idx_user_mview_id on user_mview (id);
-
--- Drop the columns
-alter table user_ drop column matrix_user_id;
diff --git a/server/migrations/2020-01-21-001001_create_private_message/up.sql b/server/migrations/2020-01-21-001001_create_private_message/up.sql
deleted file mode 100644
index 48e16dd8..00000000
--- a/server/migrations/2020-01-21-001001_create_private_message/up.sql
+++ /dev/null
@@ -1,90 +0,0 @@
--- Creating private message
-create table private_message (
- id serial primary key,
- creator_id int references user_ on update cascade on delete cascade not null,
- recipient_id int references user_ on update cascade on delete cascade not null,
- content text not null,
- deleted boolean default false not null,
- read boolean default false not null,
- published timestamp not null default now(),
- updated timestamp
-);
-
--- Create the view and materialized view which has the avatar and creator name
-create view private_message_view as
-select
-pm.*,
-u.name as creator_name,
-u.avatar as creator_avatar,
-u2.name as recipient_name,
-u2.avatar as recipient_avatar
-from private_message pm
-inner join user_ u on u.id = pm.creator_id
-inner join user_ u2 on u2.id = pm.recipient_id;
-
-create materialized view private_message_mview as select * from private_message_view;
-
-create unique index idx_private_message_mview_id on private_message_mview (id);
-
--- Create the triggers
-create or replace function refresh_private_message()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently private_message_mview;
- return null;
-end $$;
-
-create trigger refresh_private_message
-after insert or update or delete or truncate
-on private_message
-for each statement
-execute procedure refresh_private_message();
-
--- Update user to include matrix id
-alter table user_ add column matrix_user_id text unique;
-
-drop view user_view cascade;
-create view user_view as
-select
-u.id,
-u.name,
-u.avatar,
-u.email,
-u.matrix_user_id,
-u.fedi_name,
-u.admin,
-u.banned,
-u.show_avatars,
-u.send_notifications_to_email,
-u.published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
-create materialized view user_mview as select * from user_view;
-
-create unique index idx_user_mview_id on user_mview (id);
-
--- This is what a group pm table would look like
--- Not going to do it now because of the complications
---
--- create table private_message (
--- id serial primary key,
--- creator_id int references user_ on update cascade on delete cascade not null,
--- content text not null,
--- deleted boolean default false not null,
--- published timestamp not null default now(),
--- updated timestamp
--- );
---
--- create table private_message_recipient (
--- id serial primary key,
--- private_message_id int references private_message on update cascade on delete cascade not null,
--- recipient_id int references user_ on update cascade on delete cascade not null,
--- read boolean default false not null,
--- published timestamp not null default now(),
--- unique(private_message_id, recipient_id)
--- )
diff --git a/server/migrations/2020-01-29-011901_create_reply_materialized_view/down.sql b/server/migrations/2020-01-29-011901_create_reply_materialized_view/down.sql
deleted file mode 100644
index 06ec5971..00000000
--- a/server/migrations/2020-01-29-011901_create_reply_materialized_view/down.sql
+++ /dev/null
@@ -1,25 +0,0 @@
--- Drop the materialized / built views
-drop view reply_view;
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
diff --git a/server/migrations/2020-01-29-011901_create_reply_materialized_view/up.sql b/server/migrations/2020-01-29-011901_create_reply_materialized_view/up.sql
deleted file mode 100644
index ebbb1dff..00000000
--- a/server/migrations/2020-01-29-011901_create_reply_materialized_view/up.sql
+++ /dev/null
@@ -1,27 +0,0 @@
--- https://github.com/dessalines/lemmy/issues/197
-drop view reply_view;
-
--- Do the reply_view referencing the comment_mview
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_mview cv, closereply
-where closereply.id = cv.id
-;
diff --git a/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/down.sql b/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/down.sql
deleted file mode 100644
index d93ebc2e..00000000
--- a/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/down.sql
+++ /dev/null
@@ -1 +0,0 @@
-drop view user_mention_mview;
diff --git a/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/up.sql b/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/up.sql
deleted file mode 100644
index b0ae4e9d..00000000
--- a/server/migrations/2020-01-29-030825_create_user_mention_materialized_view/up.sql
+++ /dev/null
@@ -1,67 +0,0 @@
-create view user_mention_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- u.id as user_id,
- coalesce(cl.score, 0) as my_vote,
- (select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved,
- um.recipient_id
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-left join user_mention um on um.comment_id = ac.id
-
-union all
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- null as user_id,
- null as my_vote,
- null as saved,
- um.recipient_id
-from all_comment ac
-left join user_mention um on um.comment_id = ac.id
-;
-
diff --git a/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/down.sql b/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/down.sql
deleted file mode 100644
index 0c6f112f..00000000
--- a/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/down.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-drop index idx_user_name_lower;
-drop index idx_user_email_lower;
diff --git a/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/up.sql b/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/up.sql
deleted file mode 100644
index 07f854b1..00000000
--- a/server/migrations/2020-02-02-004806_add_case_insensitive_usernames/up.sql
+++ /dev/null
@@ -1,29 +0,0 @@
--- Add case insensitive username and email uniqueness
-
--- An example of showing the dupes:
--- select
--- max(id) as id,
--- lower(name) as lname,
--- count(*)
--- from user_
--- group by lower(name)
--- having count(*) > 1;
-
--- Delete username dupes, keeping the first one
-delete
-from user_
-where id not in (
- select min(id)
- from user_
- group by lower(name), lower(fedi_name)
-);
-
--- The user index
-create unique index idx_user_name_lower on user_ (lower(name));
-
--- Email lower
-create unique index idx_user_email_lower on user_ (lower(email));
-
--- Set empty emails properly to null
-update user_ set email = null where email = '';
-
diff --git a/server/migrations/2020-02-06-165953_change_post_title_length/down.sql b/server/migrations/2020-02-06-165953_change_post_title_length/down.sql
deleted file mode 100644
index 2bc765f8..00000000
--- a/server/migrations/2020-02-06-165953_change_post_title_length/down.sql
+++ /dev/null
@@ -1,132 +0,0 @@
--- Drop the dependent views
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-drop view mod_remove_post_view;
-drop view mod_sticky_post_view;
-drop view mod_lock_post_view;
-drop view mod_remove_comment_view;
-
-alter table post alter column name type varchar(100);
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
-from post p
-left join post_like pl on p.id = pl.post_id
-group by p.id;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
--- The mod views
-
-create view mod_remove_post_view as
-select mrp.*,
-(select name from user_ u where mrp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where mrp.post_id = p.id) as post_name,
-(select c.id from post p, community c where mrp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where mrp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_remove_post mrp;
-
-create view mod_lock_post_view as
-select mlp.*,
-(select name from user_ u where mlp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where mlp.post_id = p.id) as post_name,
-(select c.id from post p, community c where mlp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where mlp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_lock_post mlp;
-
-create view mod_remove_comment_view as
-select mrc.*,
-(select name from user_ u where mrc.mod_user_id = u.id) as mod_user_name,
-(select c.id from comment c where mrc.comment_id = c.id) as comment_user_id,
-(select name from user_ u, comment c where mrc.comment_id = c.id and u.id = c.creator_id) as comment_user_name,
-(select content from comment c where mrc.comment_id = c.id) as comment_content,
-(select p.id from post p, comment c where mrc.comment_id = c.id and c.post_id = p.id) as post_id,
-(select p.name from post p, comment c where mrc.comment_id = c.id and c.post_id = p.id) as post_name,
-(select co.id from comment c, post p, community co where mrc.comment_id = c.id and c.post_id = p.id and p.community_id = co.id) as community_id,
-(select co.name from comment c, post p, community co where mrc.comment_id = c.id and c.post_id = p.id and p.community_id = co.id) as community_name
-from mod_remove_comment mrc;
-
-create view mod_sticky_post_view as
-select msp.*,
-(select name from user_ u where msp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where msp.post_id = p.id) as post_name,
-(select c.id from post p, community c where msp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where msp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_sticky_post msp;
diff --git a/server/migrations/2020-02-06-165953_change_post_title_length/up.sql b/server/migrations/2020-02-06-165953_change_post_title_length/up.sql
deleted file mode 100644
index 006a7d04..00000000
--- a/server/migrations/2020-02-06-165953_change_post_title_length/up.sql
+++ /dev/null
@@ -1,133 +0,0 @@
--- Drop the dependent views
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-drop view mod_remove_post_view;
-drop view mod_sticky_post_view;
-drop view mod_lock_post_view;
-drop view mod_remove_comment_view;
-
--- Add the extra post limit
-alter table post alter column name type varchar(200);
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
-from post p
-left join post_like pl on p.id = pl.post_id
-group by p.id;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
--- The mod views
-
-create view mod_remove_post_view as
-select mrp.*,
-(select name from user_ u where mrp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where mrp.post_id = p.id) as post_name,
-(select c.id from post p, community c where mrp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where mrp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_remove_post mrp;
-
-create view mod_lock_post_view as
-select mlp.*,
-(select name from user_ u where mlp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where mlp.post_id = p.id) as post_name,
-(select c.id from post p, community c where mlp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where mlp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_lock_post mlp;
-
-create view mod_remove_comment_view as
-select mrc.*,
-(select name from user_ u where mrc.mod_user_id = u.id) as mod_user_name,
-(select c.id from comment c where mrc.comment_id = c.id) as comment_user_id,
-(select name from user_ u, comment c where mrc.comment_id = c.id and u.id = c.creator_id) as comment_user_name,
-(select content from comment c where mrc.comment_id = c.id) as comment_content,
-(select p.id from post p, comment c where mrc.comment_id = c.id and c.post_id = p.id) as post_id,
-(select p.name from post p, comment c where mrc.comment_id = c.id and c.post_id = p.id) as post_name,
-(select co.id from comment c, post p, community co where mrc.comment_id = c.id and c.post_id = p.id and p.community_id = co.id) as community_id,
-(select co.name from comment c, post p, community co where mrc.comment_id = c.id and c.post_id = p.id and p.community_id = co.id) as community_name
-from mod_remove_comment mrc;
-
-create view mod_sticky_post_view as
-select msp.*,
-(select name from user_ u where msp.mod_user_id = u.id) as mod_user_name,
-(select name from post p where msp.post_id = p.id) as post_name,
-(select c.id from post p, community c where msp.post_id = p.id and p.community_id = c.id) as community_id,
-(select c.name from post p, community c where msp.post_id = p.id and p.community_id = c.id) as community_name
-from mod_sticky_post msp;
diff --git a/server/migrations/2020-02-07-210055_add_comment_subscribed/down.sql b/server/migrations/2020-02-07-210055_add_comment_subscribed/down.sql
deleted file mode 100644
index b6120d15..00000000
--- a/server/migrations/2020-02-07-210055_add_comment_subscribed/down.sql
+++ /dev/null
@@ -1,206 +0,0 @@
-
-drop view reply_view;
-drop view user_mention_view;
-drop view user_mention_mview;
-drop view comment_view;
-drop view comment_mview;
-drop materialized view comment_aggregates_mview;
-drop view comment_aggregates_view;
-
--- reply and comment view
-create view comment_aggregates_view as
-select
-c.*,
-(select community_id from post p where p.id = c.post_id),
-(select u.banned from user_ u where c.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where c.creator_id = user_.id) as creator_name,
-(select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
-coalesce(sum(cl.score), 0) as score,
-count (case when cl.score = 1 then 1 else null end) as upvotes,
-count (case when cl.score = -1 then 1 else null end) as downvotes
-from comment c
-left join comment_like cl on c.id = cl.comment_id
-group by c.id;
-
-create materialized view comment_aggregates_mview as select * from comment_aggregates_view;
-
-create unique index idx_comment_aggregates_mview_id on comment_aggregates_mview (id);
-
-create view comment_view as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_view ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view comment_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-
--- Do the reply_view referencing the comment_mview
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_mview cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
-
-create view user_mention_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- u.id as user_id,
- coalesce(cl.score, 0) as my_vote,
- (select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved,
- um.recipient_id
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-left join user_mention um on um.comment_id = ac.id
-
-union all
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- null as user_id,
- null as my_vote,
- null as saved,
- um.recipient_id
-from all_comment ac
-left join user_mention um on um.comment_id = ac.id
-;
-
diff --git a/server/migrations/2020-02-07-210055_add_comment_subscribed/up.sql b/server/migrations/2020-02-07-210055_add_comment_subscribed/up.sql
deleted file mode 100644
index 8836a571..00000000
--- a/server/migrations/2020-02-07-210055_add_comment_subscribed/up.sql
+++ /dev/null
@@ -1,220 +0,0 @@
-
--- Adding community name, hot_rank, to comment_view, user_mention_view, and subscribed to comment_view
-
--- Rebuild the comment view
-drop view reply_view;
-drop view user_mention_view;
-drop view user_mention_mview;
-drop view comment_view;
-drop view comment_mview;
-drop materialized view comment_aggregates_mview;
-drop view comment_aggregates_view;
-
--- reply and comment view
-create view comment_aggregates_view as
-select
-c.*,
-(select community_id from post p where p.id = c.post_id),
-(select co.name from post p, community co where p.id = c.post_id and p.community_id = co.id) as community_name,
-(select u.banned from user_ u where c.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where c.creator_id = user_.id) as creator_name,
-(select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
-coalesce(sum(cl.score), 0) as score,
-count (case when cl.score = 1 then 1 else null end) as upvotes,
-count (case when cl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(cl.score) , 0), c.published) as hot_rank
-from comment c
-left join comment_like cl on c.id = cl.comment_id
-group by c.id;
-
-create materialized view comment_aggregates_mview as select * from comment_aggregates_view;
-
-create unique index idx_comment_aggregates_mview_id on comment_aggregates_mview (id);
-
-create view comment_view as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_view ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.community_id = cf.community_id) as subscribed,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as subscribed,
- null as saved
-from all_comment ac
-;
-
-create view comment_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.community_id = cf.community_id) as subscribed,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as subscribed,
- null as saved
-from all_comment ac
-;
-
--- Do the reply_view referencing the comment_mview
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_mview cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.community_name,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.hot_rank,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
-
-create view user_mention_mview as
-with all_comment as
-(
- select
- ca.*
- from comment_aggregates_mview ca
-)
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.community_name,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- ac.hot_rank,
- u.id as user_id,
- coalesce(cl.score, 0) as my_vote,
- (select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved,
- um.recipient_id
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-left join user_mention um on um.comment_id = ac.id
-
-union all
-
-select
- ac.id,
- um.id as user_mention_id,
- ac.creator_id,
- ac.post_id,
- ac.parent_id,
- ac.content,
- ac.removed,
- um.read,
- ac.published,
- ac.updated,
- ac.deleted,
- ac.community_id,
- ac.community_name,
- ac.banned,
- ac.banned_from_community,
- ac.creator_name,
- ac.creator_avatar,
- ac.score,
- ac.upvotes,
- ac.downvotes,
- ac.hot_rank,
- null as user_id,
- null as my_vote,
- null as saved,
- um.recipient_id
-from all_comment ac
-left join user_mention um on um.comment_id = ac.id
-;
-
diff --git a/server/migrations/2020-02-08-145624_add_post_newest_activity_time/down.sql b/server/migrations/2020-02-08-145624_add_post_newest_activity_time/down.sql
deleted file mode 100644
index 8b912fa3..00000000
--- a/server/migrations/2020-02-08-145624_add_post_newest_activity_time/down.sql
+++ /dev/null
@@ -1,88 +0,0 @@
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
-from post p
-left join post_like pl on p.id = pl.post_id
-group by p.id;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
diff --git a/server/migrations/2020-02-08-145624_add_post_newest_activity_time/up.sql b/server/migrations/2020-02-08-145624_add_post_newest_activity_time/up.sql
deleted file mode 100644
index e1541277..00000000
--- a/server/migrations/2020-02-08-145624_add_post_newest_activity_time/up.sql
+++ /dev/null
@@ -1,106 +0,0 @@
--- Adds a newest_activity_time for the post_views, in order to sort by newest comment
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0),
- (
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
- )
-) as hot_rank,
-(
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
-) as newest_activity_time
-from post p
-left join post_like pl on p.id = pl.post_id
-left join (
- select post_id,
- max(published) as recent_comment_time
- from comment
- group by 1
-) c on p.id = c.post_id
-group by p.id, c.recent_comment_time;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
diff --git a/server/migrations/2020-03-06-202329_add_post_iframely_data/down.sql b/server/migrations/2020-03-06-202329_add_post_iframely_data/down.sql
deleted file mode 100644
index 71dcc6ba..00000000
--- a/server/migrations/2020-03-06-202329_add_post_iframely_data/down.sql
+++ /dev/null
@@ -1,112 +0,0 @@
--- Adds a newest_activity_time for the post_views, in order to sort by newest comment
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-
--- Drop the columns
-alter table post drop column embed_title;
-alter table post drop column embed_description;
-alter table post drop column embed_html;
-alter table post drop column thumbnail_url;
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0),
- (
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
- )
-) as hot_rank,
-(
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
-) as newest_activity_time
-from post p
-left join post_like pl on p.id = pl.post_id
-left join (
- select post_id,
- max(published) as recent_comment_time
- from comment
- group by 1
-) c on p.id = c.post_id
-group by p.id, c.recent_comment_time;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
diff --git a/server/migrations/2020-03-06-202329_add_post_iframely_data/up.sql b/server/migrations/2020-03-06-202329_add_post_iframely_data/up.sql
deleted file mode 100644
index d431bb7f..00000000
--- a/server/migrations/2020-03-06-202329_add_post_iframely_data/up.sql
+++ /dev/null
@@ -1,115 +0,0 @@
--- Add the columns
-alter table post add column embed_title text;
-alter table post add column embed_description text;
-alter table post add column embed_html text;
-alter table post add column thumbnail_url text;
-
--- Regenerate the views
-
--- Adds a newest_activity_time for the post_views, in order to sort by newest comment
-drop view post_view;
-drop view post_mview;
-drop materialized view post_aggregates_mview;
-drop view post_aggregates_view;
-
--- regen post view
-create view post_aggregates_view as
-select
-p.*,
-(select u.banned from user_ u where p.creator_id = u.id) as banned,
-(select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
-(select name from user_ where p.creator_id = user_.id) as creator_name,
-(select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
-(select name from community where p.community_id = community.id) as community_name,
-(select removed from community c where p.community_id = c.id) as community_removed,
-(select deleted from community c where p.community_id = c.id) as community_deleted,
-(select nsfw from community c where p.community_id = c.id) as community_nsfw,
-(select count(*) from comment where comment.post_id = p.id) as number_of_comments,
-coalesce(sum(pl.score), 0) as score,
-count (case when pl.score = 1 then 1 else null end) as upvotes,
-count (case when pl.score = -1 then 1 else null end) as downvotes,
-hot_rank(coalesce(sum(pl.score) , 0),
- (
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
- )
-) as hot_rank,
-(
- case when (p.published < ('now'::timestamp - '1 month'::interval)) then p.published -- Prevents necro-bumps
- else greatest(c.recent_comment_time, p.published)
- end
-) as newest_activity_time
-from post p
-left join post_like pl on p.id = pl.post_id
-left join (
- select post_id,
- max(published) as recent_comment_time
- from comment
- group by 1
-) c on p.id = c.post_id
-group by p.id, c.recent_comment_time;
-
-create materialized view post_aggregates_mview as select * from post_aggregates_view;
-
-create unique index idx_post_aggregates_mview_id on post_aggregates_mview (id);
-
-create view post_view as
-with all_post as (
- select
- pa.*
- from post_aggregates_view pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-create view post_mview as
-with all_post as (
- select
- pa.*
- from post_aggregates_mview pa
-)
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-
diff --git a/server/migrations_testing/2020-01-13-025151_create_materialized_views/down.sql b/server/migrations_testing/2020-01-13-025151_create_materialized_views/down.sql
deleted file mode 100644
index ba801ba5..00000000
--- a/server/migrations_testing/2020-01-13-025151_create_materialized_views/down.sql
+++ /dev/null
@@ -1,211 +0,0 @@
--- functions and triggers
-drop trigger refresh_user on user_;
-drop function refresh_user();
-drop trigger refresh_post on post;
-drop function refresh_post();
-drop trigger refresh_post_like on post_like;
-drop function refresh_post_like();
-drop trigger refresh_community on community;
-drop function refresh_community();
-drop trigger refresh_community_follower on community_follower;
-drop function refresh_community_follower();
-drop trigger refresh_comment on comment;
-drop function refresh_comment();
-drop trigger refresh_comment_like on comment_like;
-drop function refresh_comment_like();
-
--- post
--- Recreate the view
-drop materialized view post_view;
-create view post_view as
-with all_post as
-(
- select
- p.*,
- (select u.banned from user_ u where p.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where p.creator_id = user_.id) as creator_name,
- (select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
- (select name from community where p.community_id = community.id) as community_name,
- (select removed from community c where p.community_id = c.id) as community_removed,
- (select deleted from community c where p.community_id = c.id) as community_deleted,
- (select nsfw from community c where p.community_id = c.id) as community_nsfw,
- (select count(*) from comment where comment.post_id = p.id) as number_of_comments,
- coalesce(sum(pl.score), 0) as score,
- count (case when pl.score = 1 then 1 else null end) as upvotes,
- count (case when pl.score = -1 then 1 else null end) as downvotes,
- hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
- from post p
- left join post_like pl on p.id = pl.post_id
- group by p.id
-)
-
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-;
-
-
-drop materialized view user_view;
-create view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-show_avatars,
-send_notifications_to_email,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
-
--- community
-drop materialized view community_view;
-create view community_view as
-with all_community as
-(
- select *,
- (select name from user_ u where c.creator_id = u.id) as creator_name,
- (select avatar from user_ u where c.creator_id = u.id) as creator_avatar,
- (select name from category ct where c.category_id = ct.id) as category_name,
- (select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
- (select count(*) from post p where p.community_id = c.id) as number_of_posts,
- (select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
- hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
- from community c
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
--- reply and comment view
-drop view reply_view;
-drop view user_mention_view;
-drop materialized view comment_view;
-create view comment_view as
-with all_comment as
-(
- select
- c.*,
- (select community_id from post p where p.id = c.post_id),
- (select u.banned from user_ u where c.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where c.creator_id = user_.id) as creator_name,
- (select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
- coalesce(sum(cl.score), 0) as score,
- count (case when cl.score = 1 then 1 else null end) as upvotes,
- count (case when cl.score = -1 then 1 else null end) as downvotes
- from comment c
- left join comment_like cl on c.id = cl.comment_id
- group by c.id
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
diff --git a/server/migrations_testing/2020-01-13-025151_create_materialized_views/up.sql b/server/migrations_testing/2020-01-13-025151_create_materialized_views/up.sql
deleted file mode 100644
index 33b0442f..00000000
--- a/server/migrations_testing/2020-01-13-025151_create_materialized_views/up.sql
+++ /dev/null
@@ -1,324 +0,0 @@
--- post
-drop view post_view;
-create materialized view post_view as
-with all_post as
-(
- select
- p.*,
- (select u.banned from user_ u where p.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb where p.creator_id = cb.user_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where p.creator_id = user_.id) as creator_name,
- (select avatar from user_ where p.creator_id = user_.id) as creator_avatar,
- (select name from community where p.community_id = community.id) as community_name,
- (select removed from community c where p.community_id = c.id) as community_removed,
- (select deleted from community c where p.community_id = c.id) as community_deleted,
- (select nsfw from community c where p.community_id = c.id) as community_nsfw,
- (select count(*) from comment where comment.post_id = p.id) as number_of_comments,
- coalesce(sum(pl.score), 0) as score,
- count (case when pl.score = 1 then 1 else null end) as upvotes,
- count (case when pl.score = -1 then 1 else null end) as downvotes,
- hot_rank(coalesce(sum(pl.score) , 0), p.published) as hot_rank
- from post p
- left join post_like pl on p.id = pl.post_id
- group by p.id
-)
-
-select
-ap.*,
-u.id as user_id,
-coalesce(pl.score, 0) as my_vote,
-(select cf.id::bool from community_follower cf where u.id = cf.user_id and cf.community_id = ap.community_id) as subscribed,
-(select pr.id::bool from post_read pr where u.id = pr.user_id and pr.post_id = ap.id) as read,
-(select ps.id::bool from post_saved ps where u.id = ps.user_id and ps.post_id = ap.id) as saved
-from user_ u
-cross join all_post ap
-left join post_like pl on u.id = pl.user_id and ap.id = pl.post_id
-
-union all
-
-select
-ap.*,
-null as user_id,
-null as my_vote,
-null as subscribed,
-null as read,
-null as saved
-from all_post ap
-with data
-;
-
-create unique index idx_post_view_unique on post_view (id, user_id);
-create index idx_post_view_user_id on post_view (user_id);
-create index idx_post_view_hot_rank_published on post_view (hot_rank desc, published desc);
-create index idx_post_view_published on post_view (published desc);
-create index idx_post_view_score on post_view (score desc);
-
--- user_view
-drop view user_view;
-create materialized view user_view as
-select id,
-name,
-avatar,
-email,
-fedi_name,
-admin,
-banned,
-show_avatars,
-send_notifications_to_email,
-published,
-(select count(*) from post p where p.creator_id = u.id) as number_of_posts,
-(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score,
-(select count(*) from comment c where c.creator_id = u.id) as number_of_comments,
-(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score
-from user_ u;
-
-create unique index idx_user_view_unique on user_view (id);
-create index idx_user_view_comment_published on user_view (comment_score desc, published desc);
-create index idx_user_view_admin on user_view (admin);
-create index idx_user_view_banned on user_view (banned);
-
--- community
-drop view community_view;
-create materialized view community_view as
-with all_community as
-(
- select *,
- (select name from user_ u where c.creator_id = u.id) as creator_name,
- (select avatar from user_ u where c.creator_id = u.id) as creator_avatar,
- (select name from category ct where c.category_id = ct.id) as category_name,
- (select count(*) from community_follower cf where cf.community_id = c.id) as number_of_subscribers,
- (select count(*) from post p where p.community_id = c.id) as number_of_posts,
- (select count(*) from comment co, post p where c.id = p.community_id and p.id = co.post_id) as number_of_comments,
- hot_rank((select count(*) from community_follower cf where cf.community_id = c.id), c.published) as hot_rank
- from community c
-)
-
-select
-ac.*,
-u.id as user_id,
-(select cf.id::boolean from community_follower cf where u.id = cf.user_id and ac.id = cf.community_id) as subscribed
-from user_ u
-cross join all_community ac
-
-union all
-
-select
-ac.*,
-null as user_id,
-null as subscribed
-from all_community ac
-;
-
-create unique index idx_community_view_unique on community_view (id, user_id);
-create index idx_community_view_user_id on community_view (user_id);
-create index idx_community_view_hot_rank_subscribed on community_view (hot_rank desc, number_of_subscribers desc);
-
-
--- reply and comment view
-drop view reply_view;
-drop view user_mention_view;
-drop view comment_view;
-create materialized view comment_view as
-with all_comment as
-(
- select
- c.*,
- (select community_id from post p where p.id = c.post_id),
- (select u.banned from user_ u where c.creator_id = u.id) as banned,
- (select cb.id::bool from community_user_ban cb, post p where c.creator_id = cb.user_id and p.id = c.post_id and p.community_id = cb.community_id) as banned_from_community,
- (select name from user_ where c.creator_id = user_.id) as creator_name,
- (select avatar from user_ where c.creator_id = user_.id) as creator_avatar,
- coalesce(sum(cl.score), 0) as score,
- count (case when cl.score = 1 then 1 else null end) as upvotes,
- count (case when cl.score = -1 then 1 else null end) as downvotes
- from comment c
- left join comment_like cl on c.id = cl.comment_id
- group by c.id
-)
-
-select
-ac.*,
-u.id as user_id,
-coalesce(cl.score, 0) as my_vote,
-(select cs.id::bool from comment_saved cs where u.id = cs.user_id and cs.comment_id = ac.id) as saved
-from user_ u
-cross join all_comment ac
-left join comment_like cl on u.id = cl.user_id and ac.id = cl.comment_id
-
-union all
-
-select
- ac.*,
- null as user_id,
- null as my_vote,
- null as saved
-from all_comment ac
-;
-
-create unique index idx_comment_view_unique on comment_view (id, user_id);
-create index idx_comment_view_user_id on comment_view (user_id);
-create index idx_comment_view_creator_id on comment_view (creator_id);
-create index idx_comment_view_post_id on comment_view (post_id);
-create index idx_comment_view_score on comment_view (score desc);
-
-create view reply_view as
-with closereply as (
- select
- c2.id,
- c2.creator_id as sender_id,
- c.creator_id as recipient_id
- from comment c
- inner join comment c2 on c.id = c2.parent_id
- where c2.creator_id != c.creator_id
- -- Do union where post is null
- union
- select
- c.id,
- c.creator_id as sender_id,
- p.creator_id as recipient_id
- from comment c, post p
- where c.post_id = p.id and c.parent_id is null and c.creator_id != p.creator_id
-)
-select cv.*,
-closereply.recipient_id
-from comment_view cv, closereply
-where closereply.id = cv.id
-;
-
--- user mention
-create view user_mention_view as
-select
- c.id,
- um.id as user_mention_id,
- c.creator_id,
- c.post_id,
- c.parent_id,
- c.content,
- c.removed,
- um.read,
- c.published,
- c.updated,
- c.deleted,
- c.community_id,
- c.banned,
- c.banned_from_community,
- c.creator_name,
- c.creator_avatar,
- c.score,
- c.upvotes,
- c.downvotes,
- c.user_id,
- c.my_vote,
- c.saved,
- um.recipient_id
-from user_mention um, comment_view c
-where um.comment_id = c.id;
-
--- user
-create or replace function refresh_user()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently comment_view; -- cause of bans
- refresh materialized view concurrently post_view;
- return null;
-end $$;
-
-create trigger refresh_user
-after insert or update or delete or truncate
-on user_
-for each statement
-execute procedure refresh_user();
-
--- post
-create or replace function refresh_post()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_view;
- return null;
-end $$;
-
-create trigger refresh_post
-after insert or update or delete or truncate
-on post
-for each statement
-execute procedure refresh_post();
-
--- post_like
-create or replace function refresh_post_like()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_view;
- return null;
-end $$;
-
-create trigger refresh_post_like
-after insert or update or delete or truncate
-on post_like
-for each statement
-execute procedure refresh_post_like();
-
--- community
-create or replace function refresh_community()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_view;
- refresh materialized view concurrently community_view;
- return null;
-end $$;
-
-create trigger refresh_community
-after insert or update or delete or truncate
-on community
-for each statement
-execute procedure refresh_community();
-
--- community_follower
-create or replace function refresh_community_follower()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently community_view;
- refresh materialized view concurrently post_view;
- return null;
-end $$;
-
-create trigger refresh_community_follower
-after insert or update or delete or truncate
-on community_follower
-for each statement
-execute procedure refresh_community_follower();
-
--- comment
-create or replace function refresh_comment()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently post_view;
- refresh materialized view concurrently comment_view;
- return null;
-end $$;
-
-create trigger refresh_comment
-after insert or update or delete or truncate
-on comment
-for each statement
-execute procedure refresh_comment();
-
--- comment_like
-create or replace function refresh_comment_like()
-returns trigger language plpgsql
-as $$
-begin
- refresh materialized view concurrently comment_view;
- return null;
-end $$;
-
-create trigger refresh_comment_like
-after insert or update or delete or truncate
-on comment_like
-for each statement
-execute procedure refresh_comment_like();
diff --git a/server/query_testing/apache_bench_report.sh b/server/query_testing/apache_bench_report.sh
deleted file mode 100755
index 06ceb484..00000000
--- a/server/query_testing/apache_bench_report.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-set -e
-
-declare -a arr=(
-"https://mastodon.social/"
-"https://peertube.social/"
-"https://dev.lemmy.ml/"
-"https://dev.lemmy.ml/feeds/all.xml"
-"https://dev.lemmy.ml/.well-known/nodeinfo"
-"https://fediverse.blog/.well-known/nodeinfo"
-"https://torrents-csv.ml/service/search?q=wheel&page=1&type_=torrent"
-)
-
-## check if ab installed
-if ! [ -x "$(command -v ab)" ]; then
- echo 'Error: ab (Apache Bench) is not installed. https://httpd.apache.org/docs/2.4/programs/ab.html' >&2
- exit 1
-fi
-
-## now loop through the above array
-for i in "${arr[@]}"
-do
- ab -c 10 -t 10 "$i" > out.abtest
- grep "Server Hostname:" out.abtest
- grep "Document Path:" out.abtest
- grep "Requests per second" out.abtest
- grep "(mean, across all concurrent requests)" out.abtest
- grep "Transfer rate:" out.abtest
- echo "---"
-done
-
-rm *.abtest
diff --git a/server/query_testing/api_benchmark.sh b/server/query_testing/api_benchmark.sh
deleted file mode 100755
index 9f06580a..00000000
--- a/server/query_testing/api_benchmark.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-set -e
-
-# By default, this script runs against `http://127.0.0.1:8536`, but you can pass a different Lemmy instance,
-# eg `./api_benchmark.sh "https://example.com"`.
-DOMAIN=${1:-"http://127.0.0.1:8536"}
-
-declare -a arr=(
-"/api/v1/site"
-"/api/v1/categories"
-"/api/v1/modlog"
-"/api/v1/search?q=test&type_=Posts&sort=Hot"
-"/api/v1/community"
-"/api/v1/community/list?sort=Hot"
-"/api/v1/post/list?sort=Hot&type_=All"
-)
-
-## check if ab installed
-if ! [ -x "$(command -v ab)" ]; then
- echo 'Error: ab (Apache Bench) is not installed. https://httpd.apache.org/docs/2.4/programs/ab.html' >&2
- exit 1
-fi
-
-## now loop through the above array
-for path in "${arr[@]}"
-do
- URL="$DOMAIN$path"
- printf "\n\n\n"
- echo "testing $URL"
- curl --show-error --fail --silent "$URL" >/dev/null
- ab -c 64 -t 10 "$URL" > out.abtest
- grep "Server Hostname:" out.abtest
- grep "Document Path:" out.abtest
- grep "Requests per second" out.abtest
- grep "(mean, across all concurrent requests)" out.abtest
- grep "Transfer rate:" out.abtest
- echo "---"
-done
-
-rm *.abtest
diff --git a/server/query_testing/generate_explain_reports.sh b/server/query_testing/generate_explain_reports.sh
deleted file mode 100755
index 6ce7dc42..00000000
--- a/server/query_testing/generate_explain_reports.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-set -e
-
-# Do the views first
-
-echo "explain (analyze, format json) select * from user_mview" > explain.sql
-psql -qAt -U lemmy -f explain.sql > user_view.json
-
-echo "explain (analyze, format json) select * from post_mview where user_id is null order by hot_rank desc, published desc" > explain.sql
-psql -qAt -U lemmy -f explain.sql > post_view.json
-
-echo "explain (analyze, format json) select * from comment_mview where user_id is null" > explain.sql
-psql -qAt -U lemmy -f explain.sql > comment_view.json
-
-echo "explain (analyze, format json) select * from community_mview where user_id is null order by hot_rank desc" > explain.sql
-psql -qAt -U lemmy -f explain.sql > community_view.json
-
-echo "explain (analyze, format json) select * from site_view limit 1" > explain.sql
-psql -qAt -U lemmy -f explain.sql > site_view.json
-
-echo "explain (analyze, format json) select * from reply_view where user_id = 34 and recipient_id = 34" > explain.sql
-psql -qAt -U lemmy -f explain.sql > reply_view.json
-
-echo "explain (analyze, format json) select * from user_mention_view where user_id = 34 and recipient_id = 34" > explain.sql
-psql -qAt -U lemmy -f explain.sql > user_mention_view.json
-
-echo "explain (analyze, format json) select * from user_mention_mview where user_id = 34 and recipient_id = 34" > explain.sql
-psql -qAt -U lemmy -f explain.sql > user_mention_mview.json
-
-grep "Execution Time" *.json
-
-rm explain.sql
diff --git a/server/src/api/comment.rs b/server/src/api/comment.rs
index 058c7267..9f9d46d3 100644
--- a/server/src/api/comment.rs
+++ b/server/src/api/comment.rs
@@ -4,7 +4,7 @@ use super::*;
pub struct CreateComment {
content: String,
parent_id: Option,
- edit_id: Option, // TODO this isn't used
+ edit_id: Option,
pub post_id: i32,
auth: String,
}
@@ -12,7 +12,7 @@ pub struct CreateComment {
#[derive(Serialize, Deserialize)]
pub struct EditComment {
content: String,
- parent_id: Option, // TODO why are the parent_id, creator_id, post_id, etc fields required? They aren't going to change
+ parent_id: Option,
edit_id: i32,
creator_id: i32,
pub post_id: i32,
@@ -32,8 +32,8 @@ pub struct SaveComment {
#[derive(Serialize, Deserialize, Clone)]
pub struct CommentResponse {
+ op: String,
pub comment: CommentView,
- pub recipient_ids: Vec,
}
#[derive(Serialize, Deserialize)]
@@ -44,51 +44,27 @@ pub struct CreateCommentLike {
auth: String,
}
-#[derive(Serialize, Deserialize)]
-pub struct GetComments {
- type_: String,
- sort: String,
- page: Option,
- limit: Option,
- pub community_id: Option,
- auth: Option,
-}
-
-#[derive(Serialize, Deserialize)]
-pub struct GetCommentsResponse {
- comments: Vec,
-}
-
-impl Perform for Oper {
- type Response = CommentResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &CreateComment = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let hostname = &format!("https://{}", Settings::get().hostname);
-
- let conn = pool.get()?;
-
// Check for a community ban
let post = Post::read(&conn, data.post_id)?;
if CommunityUserBanView::get(&conn, user_id, post.community_id).is_ok() {
- return Err(APIError::err("community_ban").into());
+ return Err(APIError::err(&self.op, "community_ban"))?;
}
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
let content_slurs_removed = remove_slurs(&data.content.to_owned());
@@ -106,24 +82,24 @@ impl Perform for Oper {
let inserted_comment = match Comment::create(&conn, &comment_form) {
Ok(comment) => comment,
- Err(_e) => return Err(APIError::err("couldnt_create_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_create_comment"))?,
};
- let mut recipient_ids = Vec::new();
-
// Scan the comment for user mentions, add those rows
let extracted_usernames = extract_usernames(&comment_form.content);
for username_mention in &extracted_usernames {
- if let Ok(mention_user) = User_::read_from_name(&conn, (*username_mention).to_string()) {
+ let mention_user = User_::read_from_name(&conn, username_mention.to_string());
+
+ if mention_user.is_ok() {
+ let mention_user_id = mention_user?.id;
+
// You can't mention yourself
// At some point, make it so you can't tag the parent creator either
// This can cause two notifications, one for reply and the other for mention
- if mention_user.id != user_id {
- recipient_ids.push(mention_user.id);
-
+ if mention_user_id != user_id {
let user_mention_form = UserMentionForm {
- recipient_id: mention_user.id,
+ recipient_id: mention_user_id,
comment_id: inserted_comment.id,
read: None,
};
@@ -132,85 +108,12 @@ impl Perform for Oper {
// Let the uniqueness handle this fail
match UserMention::create(&conn, &user_mention_form) {
Ok(_mention) => (),
- Err(_e) => error!("{}", &_e),
- };
-
- // Send an email to those users that have notifications on
- if mention_user.send_notifications_to_email {
- if let Some(mention_email) = mention_user.email {
- let subject = &format!(
- "{} - Mentioned by {}",
- Settings::get().hostname,
- claims.username
- );
- let html = &format!(
- "User Mention
{} - {}
inbox",
- claims.username, comment_form.content, hostname
- );
- match send_email(subject, &mention_email, &mention_user.name, html) {
- Ok(_o) => _o,
- Err(e) => error!("{}", e),
- };
- }
+ Err(_e) => eprintln!("{}", &_e),
}
}
}
}
- // Send notifs to the parent commenter / poster
- match data.parent_id {
- Some(parent_id) => {
- let parent_comment = Comment::read(&conn, parent_id)?;
- if parent_comment.creator_id != user_id {
- let parent_user = User_::read(&conn, parent_comment.creator_id)?;
- recipient_ids.push(parent_user.id);
-
- if parent_user.send_notifications_to_email {
- if let Some(comment_reply_email) = parent_user.email {
- let subject = &format!(
- "{} - Reply from {}",
- Settings::get().hostname,
- claims.username
- );
- let html = &format!(
- "Comment Reply
{} - {}
inbox",
- claims.username, comment_form.content, hostname
- );
- match send_email(subject, &comment_reply_email, &parent_user.name, html) {
- Ok(_o) => _o,
- Err(e) => error!("{}", e),
- };
- }
- }
- }
- }
- // Its a post
- None => {
- if post.creator_id != user_id {
- let parent_user = User_::read(&conn, post.creator_id)?;
- recipient_ids.push(parent_user.id);
-
- if parent_user.send_notifications_to_email {
- if let Some(post_reply_email) = parent_user.email {
- let subject = &format!(
- "{} - Reply from {}",
- Settings::get().hostname,
- claims.username
- );
- let html = &format!(
- "Post Reply
{} - {}
inbox",
- claims.username, comment_form.content, hostname
- );
- match send_email(subject, &post_reply_email, &parent_user.name, html) {
- Ok(_o) => _o,
- Err(e) => error!("{}", e),
- };
- }
- }
- }
- }
- };
-
// You like your own comment by default
let like_form = CommentLikeForm {
comment_id: inserted_comment.id,
@@ -221,51 +124,30 @@ impl Perform for Oper {
let _inserted_like = match CommentLike::like(&conn, &like_form) {
Ok(like) => like,
- Err(_e) => return Err(APIError::err("couldnt_like_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_like_comment"))?,
};
let comment_view = CommentView::read(&conn, inserted_comment.id, Some(user_id))?;
- let mut res = CommentResponse {
+ Ok(CommentResponse {
+ op: self.op.to_string(),
comment: comment_view,
- recipient_ids,
- };
-
- if let Some(ws) = websocket_info {
- ws.chatserver.do_send(SendComment {
- op: UserOperation::CreateComment,
- comment: res.clone(),
- my_id: ws.id,
- });
-
- // strip out the recipient_ids, so that
- // users don't get double notifs
- res.recipient_ids = Vec::new();
- }
-
- Ok(res)
+ })
}
}
-impl Perform for Oper {
- type Response = CommentResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &EditComment = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let conn = pool.get()?;
-
let orig_comment = CommentView::read(&conn, data.edit_id, None)?;
// You are allowed to mark the comment as read even if you're banned.
@@ -281,17 +163,17 @@ impl Perform for Oper {
editors.append(&mut UserView::admins(&conn)?.into_iter().map(|a| a.id).collect());
if !editors.contains(&user_id) {
- return Err(APIError::err("no_comment_edit_allowed").into());
+ return Err(APIError::err(&self.op, "no_comment_edit_allowed"))?;
}
// Check for a community ban
if CommunityUserBanView::get(&conn, user_id, orig_comment.community_id).is_ok() {
- return Err(APIError::err("community_ban").into());
+ return Err(APIError::err(&self.op, "community_ban"))?;
}
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
}
@@ -314,16 +196,14 @@ impl Perform for Oper {
let _updated_comment = match Comment::update(&conn, data.edit_id, &comment_form) {
Ok(comment) => comment,
- Err(_e) => return Err(APIError::err("couldnt_update_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_update_comment"))?,
};
- let mut recipient_ids = Vec::new();
-
// Scan the comment for user mentions, add those rows
let extracted_usernames = extract_usernames(&comment_form.content);
for username_mention in &extracted_usernames {
- let mention_user = User_::read_from_name(&conn, (*username_mention).to_string());
+ let mention_user = User_::read_from_name(&conn, username_mention.to_string());
if mention_user.is_ok() {
let mention_user_id = mention_user?.id;
@@ -332,8 +212,6 @@ impl Perform for Oper {
// At some point, make it so you can't tag the parent creator either
// This can cause two notifications, one for reply and the other for mention
if mention_user_id != user_id {
- recipient_ids.push(mention_user_id);
-
let user_mention_form = UserMentionForm {
recipient_id: mention_user_id,
comment_id: data.edit_id,
@@ -344,27 +222,12 @@ impl Perform for Oper {
// Let the uniqueness handle this fail
match UserMention::create(&conn, &user_mention_form) {
Ok(_mention) => (),
- Err(_e) => error!("{}", &_e),
+ Err(_e) => eprintln!("{}", &_e),
}
}
}
}
- // Add to recipient ids
- match data.parent_id {
- Some(parent_id) => {
- let parent_comment = Comment::read(&conn, parent_id)?;
- if parent_comment.creator_id != user_id {
- let parent_user = User_::read(&conn, parent_comment.creator_id)?;
- recipient_ids.push(parent_user.id);
- }
- }
- None => {
- let post = Post::read(&conn, data.post_id)?;
- recipient_ids.push(post.creator_id);
- }
- }
-
// Mod tables
if let Some(removed) = data.removed.to_owned() {
let form = ModRemoveCommentForm {
@@ -378,40 +241,21 @@ impl Perform for Oper {
let comment_view = CommentView::read(&conn, data.edit_id, Some(user_id))?;
- let mut res = CommentResponse {
+ Ok(CommentResponse {
+ op: self.op.to_string(),
comment: comment_view,
- recipient_ids,
- };
-
- if let Some(ws) = websocket_info {
- ws.chatserver.do_send(SendComment {
- op: UserOperation::EditComment,
- comment: res.clone(),
- my_id: ws.id,
- });
-
- // strip out the recipient_ids, so that
- // users don't get double notifs
- res.recipient_ids = Vec::new();
- }
-
- Ok(res)
+ })
}
}
-impl Perform for Oper {
- type Response = CommentResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &SaveComment = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
@@ -421,83 +265,56 @@ impl Perform for Oper {
user_id,
};
- let conn = pool.get()?;
-
if data.save {
match CommentSaved::save(&conn, &comment_saved_form) {
Ok(comment) => comment,
- Err(_e) => return Err(APIError::err("couldnt_save_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_save_comment"))?,
};
} else {
match CommentSaved::unsave(&conn, &comment_saved_form) {
Ok(comment) => comment,
- Err(_e) => return Err(APIError::err("couldnt_save_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_save_comment"))?,
};
}
let comment_view = CommentView::read(&conn, data.comment_id, Some(user_id))?;
Ok(CommentResponse {
+ op: self.op.to_string(),
comment: comment_view,
- recipient_ids: Vec::new(),
})
}
}
-impl Perform for Oper {
- type Response = CommentResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &CreateCommentLike = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let mut recipient_ids = Vec::new();
-
- let conn = pool.get()?;
-
// Don't do a downvote if site has downvotes disabled
if data.score == -1 {
let site = SiteView::read(&conn)?;
- if !site.enable_downvotes {
- return Err(APIError::err("downvotes_disabled").into());
+ if site.enable_downvotes == false {
+ return Err(APIError::err(&self.op, "downvotes_disabled"))?;
}
}
// Check for a community ban
let post = Post::read(&conn, data.post_id)?;
if CommunityUserBanView::get(&conn, user_id, post.community_id).is_ok() {
- return Err(APIError::err("community_ban").into());
+ return Err(APIError::err(&self.op, "community_ban"))?;
}
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
- }
-
- let comment = Comment::read(&conn, data.comment_id)?;
-
- // Add to recipient ids
- match comment.parent_id {
- Some(parent_id) => {
- let parent_comment = Comment::read(&conn, parent_id)?;
- if parent_comment.creator_id != user_id {
- let parent_user = User_::read(&conn, parent_comment.creator_id)?;
- recipient_ids.push(parent_user.id);
- }
- }
- None => {
- recipient_ids.push(post.creator_id);
- }
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
let like_form = CommentLikeForm {
@@ -511,93 +328,20 @@ impl Perform for Oper {
CommentLike::remove(&conn, &like_form)?;
// Only add the like if the score isnt 0
- let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
+ let do_add = &like_form.score != &0 && (&like_form.score == &1 || &like_form.score == &-1);
if do_add {
let _inserted_like = match CommentLike::like(&conn, &like_form) {
Ok(like) => like,
- Err(_e) => return Err(APIError::err("couldnt_like_comment").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_like_comment"))?,
};
}
// Have to refetch the comment to get the current state
let liked_comment = CommentView::read(&conn, data.comment_id, Some(user_id))?;
- let mut res = CommentResponse {
+ Ok(CommentResponse {
+ op: self.op.to_string(),
comment: liked_comment,
- recipient_ids,
- };
-
- if let Some(ws) = websocket_info {
- ws.chatserver.do_send(SendComment {
- op: UserOperation::CreateCommentLike,
- comment: res.clone(),
- my_id: ws.id,
- });
-
- // strip out the recipient_ids, so that
- // users don't get double notifs
- res.recipient_ids = Vec::new();
- }
-
- Ok(res)
- }
-}
-
-impl Perform for Oper {
- type Response = GetCommentsResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
- let data: &GetComments = &self.data;
-
- let user_claims: Option = match &data.auth {
- Some(auth) => match Claims::decode(&auth) {
- Ok(claims) => Some(claims.claims),
- Err(_e) => None,
- },
- None => None,
- };
-
- let user_id = match &user_claims {
- Some(claims) => Some(claims.id),
- None => None,
- };
-
- let type_ = ListingType::from_str(&data.type_)?;
- let sort = SortType::from_str(&data.sort)?;
-
- let conn = pool.get()?;
-
- let comments = match CommentQueryBuilder::create(&conn)
- .listing_type(type_)
- .sort(&sort)
- .for_community_id(data.community_id)
- .my_user_id(user_id)
- .page(data.page)
- .limit(data.limit)
- .list()
- {
- Ok(comments) => comments,
- Err(_e) => return Err(APIError::err("couldnt_get_comments").into()),
- };
-
- if let Some(ws) = websocket_info {
- // You don't need to join the specific community room, bc this is already handled by
- // GetCommunity
- if data.community_id.is_none() {
- if let Some(id) = ws.id {
- // 0 is the "all" community
- ws.chatserver.do_send(JoinCommunityRoom {
- community_id: 0,
- id,
- });
- }
- }
- }
-
- Ok(GetCommentsResponse { comments })
+ })
}
}
diff --git a/server/src/api/community.rs b/server/src/api/community.rs
index df03546c..5c97f088 100644
--- a/server/src/api/community.rs
+++ b/server/src/api/community.rs
@@ -1,4 +1,5 @@
use super::*;
+use std::str::FromStr;
#[derive(Serialize, Deserialize)]
pub struct GetCommunity {
@@ -9,10 +10,10 @@ pub struct GetCommunity {
#[derive(Serialize, Deserialize)]
pub struct GetCommunityResponse {
- pub community: CommunityView,
+ op: String,
+ community: CommunityView,
moderators: Vec,
admins: Vec,
- pub online: usize,
}
#[derive(Serialize, Deserialize)]
@@ -27,6 +28,7 @@ pub struct CreateCommunity {
#[derive(Serialize, Deserialize, Clone)]
pub struct CommunityResponse {
+ op: String,
pub community: CommunityView,
}
@@ -40,6 +42,7 @@ pub struct ListCommunities {
#[derive(Serialize, Deserialize)]
pub struct ListCommunitiesResponse {
+ op: String,
communities: Vec,
}
@@ -53,8 +56,9 @@ pub struct BanFromCommunity {
auth: String,
}
-#[derive(Serialize, Deserialize, Clone)]
+#[derive(Serialize, Deserialize)]
pub struct BanFromCommunityResponse {
+ op: String,
user: UserView,
banned: bool,
}
@@ -67,8 +71,9 @@ pub struct AddModToCommunity {
auth: String,
}
-#[derive(Serialize, Deserialize, Clone)]
+#[derive(Serialize, Deserialize)]
pub struct AddModToCommunityResponse {
+ op: String,
moderators: Vec,
}
@@ -101,6 +106,7 @@ pub struct GetFollowedCommunities {
#[derive(Serialize, Deserialize)]
pub struct GetFollowedCommunitiesResponse {
+ op: String,
communities: Vec,
}
@@ -111,15 +117,10 @@ pub struct TransferCommunity {
auth: String,
}
-impl Perform for Oper {
- type Response = GetCommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &GetCommunity = &self.data;
+ let conn = establish_connection();
let user_id: Option = match &data.auth {
Some(auth) => match Claims::decode(&auth) {
@@ -132,29 +133,24 @@ impl Perform for Oper {
None => None,
};
- let conn = pool.get()?;
-
let community_id = match data.id {
Some(id) => id,
None => {
- match Community::read_from_name(
- &conn,
- data.name.to_owned().unwrap_or_else(|| "main".to_string()),
- ) {
+ match Community::read_from_name(&conn, data.name.to_owned().unwrap_or("main".to_string())) {
Ok(community) => community.id,
- Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_community"))?,
}
}
};
let community_view = match CommunityView::read(&conn, community_id, user_id) {
Ok(community) => community,
- Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_community"))?,
};
let moderators = match CommunityModeratorView::for_community(&conn, community_id) {
Ok(moderators) => moderators,
- Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_community"))?,
};
let site_creator_id = Site::read(&conn, 1)?.creator_id;
@@ -163,70 +159,38 @@ impl Perform for Oper {
let creator_user = admins.remove(creator_index);
admins.insert(0, creator_user);
- let online = if let Some(ws) = websocket_info {
- if let Some(id) = ws.id {
- ws.chatserver
- .do_send(JoinCommunityRoom { community_id, id });
- }
-
- // TODO
- 1
- // let fut = async {
- // ws.chatserver.send(GetCommunityUsersOnline {community_id}).await.unwrap()
- // };
- // Runtime::new().unwrap().block_on(fut)
- } else {
- 0
- };
-
- let res = GetCommunityResponse {
+ // Return the jwt
+ Ok(GetCommunityResponse {
+ op: self.op.to_string(),
community: community_view,
moderators,
admins,
- online,
- };
-
- // Return the jwt
- Ok(res)
+ })
}
}
-impl Perform for Oper {
- type Response = CommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &CreateCommunity = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
- if let Err(slurs) = slur_check(&data.name) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
-
- if let Err(slurs) = slur_check(&data.title) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
-
- if let Some(description) = &data.description {
- if let Err(slurs) = slur_check(description) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
+ if has_slurs(&data.name)
+ || has_slurs(&data.title)
+ || (data.description.is_some() && has_slurs(&data.description.to_owned().unwrap()))
+ {
+ return Err(APIError::err(&self.op, "no_slurs"))?;
}
let user_id = claims.id;
- let conn = pool.get()?;
-
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
// When you create a community, make sure the user becomes a moderator and a follower
@@ -244,7 +208,7 @@ impl Perform for Oper {
let inserted_community = match Community::create(&conn, &community_form) {
Ok(community) => community,
- Err(_e) => return Err(APIError::err("community_already_exists").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_already_exists"))?,
};
let community_moderator_form = CommunityModeratorForm {
@@ -255,7 +219,12 @@ impl Perform for Oper {
let _inserted_community_moderator =
match CommunityModerator::join(&conn, &community_moderator_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_moderator_already_exists").into()),
+ Err(_e) => {
+ return Err(APIError::err(
+ &self.op,
+ "community_moderator_already_exists",
+ ))?
+ }
};
let community_follower_form = CommunityFollowerForm {
@@ -266,53 +235,38 @@ impl Perform for Oper {
let _inserted_community_follower =
match CommunityFollower::follow(&conn, &community_follower_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_follower_already_exists").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_follower_already_exists"))?,
};
let community_view = CommunityView::read(&conn, inserted_community.id, Some(user_id))?;
Ok(CommunityResponse {
+ op: self.op.to_string(),
community: community_view,
})
}
}
-impl Perform for Oper {
- type Response = CommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &EditCommunity = &self.data;
- if let Err(slurs) = slur_check(&data.name) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
+ if has_slurs(&data.name) || has_slurs(&data.title) {
+ return Err(APIError::err(&self.op, "no_slurs"))?;
}
- if let Err(slurs) = slur_check(&data.title) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
-
- if let Some(description) = &data.description {
- if let Err(slurs) = slur_check(description) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
- }
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let conn = pool.get()?;
-
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
// Verify its a mod
@@ -325,7 +279,7 @@ impl Perform for Oper {
);
editors.append(&mut UserView::admins(&conn)?.into_iter().map(|a| a.id).collect());
if !editors.contains(&user_id) {
- return Err(APIError::err("no_community_edit_allowed").into());
+ return Err(APIError::err(&self.op, "no_community_edit_allowed"))?;
}
let community_form = CommunityForm {
@@ -342,7 +296,7 @@ impl Perform for Oper {
let _updated_community = match Community::update(&conn, data.edit_id, &community_form) {
Ok(community) => community,
- Err(_e) => return Err(APIError::err("couldnt_update_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_update_community"))?,
};
// Mod tables
@@ -363,37 +317,17 @@ impl Perform for Oper {
let community_view = CommunityView::read(&conn, data.edit_id, Some(user_id))?;
- let res = CommunityResponse {
+ Ok(CommunityResponse {
+ op: self.op.to_string(),
community: community_view,
- };
-
- if let Some(ws) = websocket_info {
- // Strip out the user id and subscribed when sending to others
- let mut res_sent = res.clone();
- res_sent.community.user_id = None;
- res_sent.community.subscribed = None;
-
- ws.chatserver.do_send(SendCommunityRoomMessage {
- op: UserOperation::EditCommunity,
- response: res_sent,
- community_id: data.edit_id,
- my_id: ws.id,
- });
- }
-
- Ok(res)
+ })
}
}
-impl Perform for Oper {
- type Response = ListCommunitiesResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &ListCommunities = &self.data;
+ let conn = establish_connection();
let user_claims: Option = match &data.auth {
Some(auth) => match Claims::decode(&auth) {
@@ -415,34 +349,30 @@ impl Perform for Oper {
let sort = SortType::from_str(&data.sort)?;
- let conn = pool.get()?;
-
let communities = CommunityQueryBuilder::create(&conn)
.sort(&sort)
- .for_user(user_id)
+ .from_user_id(user_id)
.show_nsfw(show_nsfw)
.page(data.page)
.limit(data.limit)
.list()?;
// Return the jwt
- Ok(ListCommunitiesResponse { communities })
+ Ok(ListCommunitiesResponse {
+ op: self.op.to_string(),
+ communities,
+ })
}
}
-impl Perform for Oper {
- type Response = CommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &FollowCommunity = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
@@ -452,71 +382,61 @@ impl Perform for Oper {
user_id,
};
- let conn = pool.get()?;
-
if data.follow {
match CommunityFollower::follow(&conn, &community_follower_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_follower_already_exists").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_follower_already_exists"))?,
};
} else {
match CommunityFollower::ignore(&conn, &community_follower_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_follower_already_exists").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_follower_already_exists"))?,
};
}
let community_view = CommunityView::read(&conn, data.community_id, Some(user_id))?;
Ok(CommunityResponse {
+ op: self.op.to_string(),
community: community_view,
})
}
}
-impl Perform for Oper {
- type Response = GetFollowedCommunitiesResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &GetFollowedCommunities = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let conn = pool.get()?;
-
let communities: Vec =
match CommunityFollowerView::for_user(&conn, user_id) {
Ok(communities) => communities,
- Err(_e) => return Err(APIError::err("system_err_login").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "system_err_login"))?,
};
// Return the jwt
- Ok(GetFollowedCommunitiesResponse { communities })
+ Ok(GetFollowedCommunitiesResponse {
+ op: self.op.to_string(),
+ communities,
+ })
}
}
-impl Perform for Oper {
- type Response = BanFromCommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &BanFromCommunity = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
@@ -526,17 +446,15 @@ impl Perform for Oper {
user_id: data.user_id,
};
- let conn = pool.get()?;
-
if data.ban {
match CommunityUserBan::ban(&conn, &community_user_ban_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_user_already_banned").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_user_already_banned"))?,
};
} else {
match CommunityUserBan::unban(&conn, &community_user_ban_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_user_already_banned").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "community_user_already_banned"))?,
};
}
@@ -558,37 +476,22 @@ impl Perform for Oper {
let user_view = UserView::read(&conn, data.user_id)?;
- let res = BanFromCommunityResponse {
+ Ok(BanFromCommunityResponse {
+ op: self.op.to_string(),
user: user_view,
banned: data.ban,
- };
-
- if let Some(ws) = websocket_info {
- ws.chatserver.do_send(SendCommunityRoomMessage {
- op: UserOperation::BanFromCommunity,
- response: res.clone(),
- community_id: data.community_id,
- my_id: ws.id,
- });
- }
-
- Ok(res)
+ })
}
}
-impl Perform for Oper {
- type Response = AddModToCommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &AddModToCommunity = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
@@ -598,17 +501,25 @@ impl Perform for Oper {
user_id: data.user_id,
};
- let conn = pool.get()?;
-
if data.added {
match CommunityModerator::join(&conn, &community_moderator_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_moderator_already_exists").into()),
+ Err(_e) => {
+ return Err(APIError::err(
+ &self.op,
+ "community_moderator_already_exists",
+ ))?
+ }
};
} else {
match CommunityModerator::leave(&conn, &community_moderator_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_moderator_already_exists").into()),
+ Err(_e) => {
+ return Err(APIError::err(
+ &self.op,
+ "community_moderator_already_exists",
+ ))?
+ }
};
}
@@ -623,40 +534,25 @@ impl Perform for Oper {
let moderators = CommunityModeratorView::for_community(&conn, data.community_id)?;
- let res = AddModToCommunityResponse { moderators };
-
- if let Some(ws) = websocket_info {
- ws.chatserver.do_send(SendCommunityRoomMessage {
- op: UserOperation::AddModToCommunity,
- response: res.clone(),
- community_id: data.community_id,
- my_id: ws.id,
- });
- }
-
- Ok(res)
+ Ok(AddModToCommunityResponse {
+ op: self.op.to_string(),
+ moderators,
+ })
}
}
-impl Perform for Oper {
- type Response = GetCommunityResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- _websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &TransferCommunity = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
let user_id = claims.id;
- let conn = pool.get()?;
-
let read_community = Community::read(&conn, data.community_id)?;
let site_creator_id = Site::read(&conn, 1)?.creator_id;
@@ -666,8 +562,14 @@ impl Perform for Oper {
admins.insert(0, creator_user);
// Make sure user is the creator, or an admin
- if user_id != read_community.creator_id && !admins.iter().map(|a| a.id).any(|x| x == user_id) {
- return Err(APIError::err("not_an_admin").into());
+ if user_id != read_community.creator_id
+ && !admins
+ .iter()
+ .map(|a| a.id)
+ .collect::>()
+ .contains(&user_id)
+ {
+ return Err(APIError::err(&self.op, "not_an_admin"))?;
}
let community_form = CommunityForm {
@@ -684,7 +586,7 @@ impl Perform for Oper {
let _updated_community = match Community::update(&conn, data.community_id, &community_form) {
Ok(community) => community,
- Err(_e) => return Err(APIError::err("couldnt_update_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_update_community"))?,
};
// You also have to re-do the community_moderator table, reordering it.
@@ -707,7 +609,12 @@ impl Perform for Oper {
let _inserted_community_moderator =
match CommunityModerator::join(&conn, &community_moderator_form) {
Ok(user) => user,
- Err(_e) => return Err(APIError::err("community_moderator_already_exists").into()),
+ Err(_e) => {
+ return Err(APIError::err(
+ &self.op,
+ "community_moderator_already_exists",
+ ))?
+ }
};
}
@@ -722,20 +629,20 @@ impl Perform for Oper {
let community_view = match CommunityView::read(&conn, data.community_id, Some(user_id)) {
Ok(community) => community,
- Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_community"))?,
};
let moderators = match CommunityModeratorView::for_community(&conn, data.community_id) {
Ok(moderators) => moderators,
- Err(_e) => return Err(APIError::err("couldnt_find_community").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_find_community"))?,
};
// Return the jwt
Ok(GetCommunityResponse {
+ op: self.op.to_string(),
community: community_view,
moderators,
admins,
- online: 0,
})
}
}
diff --git a/server/src/api/mod.rs b/server/src/api/mod.rs
index 3488a8c4..07712e87 100644
--- a/server/src/api/mod.rs
+++ b/server/src/api/mod.rs
@@ -8,8 +8,6 @@ use crate::db::moderator_views::*;
use crate::db::password_reset_request::*;
use crate::db::post::*;
use crate::db::post_view::*;
-use crate::db::private_message::*;
-use crate::db::private_message_view::*;
use crate::db::site::*;
use crate::db::site_view::*;
use crate::db::user::*;
@@ -17,26 +15,9 @@ use crate::db::user_mention::*;
use crate::db::user_mention_view::*;
use crate::db::user_view::*;
use crate::db::*;
-use crate::{
- extract_usernames, fetch_iframely_and_pictshare_data, generate_random_string, naive_from_unix,
- naive_now, remove_slurs, send_email, slur_check, slurs_vec_to_str,
-};
-
-use crate::settings::Settings;
-use crate::websocket::UserOperation;
-use crate::websocket::{
- server::{
- JoinCommunityRoom, JoinPostRoom, JoinUserRoom, SendAllMessage, SendComment,
- SendCommunityRoomMessage, SendPost, SendUserRoomMessage,
- },
- WebsocketInfo,
-};
-use diesel::r2d2::{ConnectionManager, Pool};
-use diesel::PgConnection;
+use crate::{extract_usernames, has_slurs, naive_from_unix, naive_now, remove_slurs};
use failure::Error;
-use log::{error, info};
use serde::{Deserialize, Serialize};
-use std::str::FromStr;
pub mod comment;
pub mod community;
@@ -44,36 +25,78 @@ pub mod post;
pub mod site;
pub mod user;
+#[derive(EnumString, ToString, Debug)]
+pub enum UserOperation {
+ Login,
+ Register,
+ CreateCommunity,
+ CreatePost,
+ ListCommunities,
+ ListCategories,
+ GetPost,
+ GetCommunity,
+ CreateComment,
+ EditComment,
+ SaveComment,
+ CreateCommentLike,
+ GetPosts,
+ CreatePostLike,
+ EditPost,
+ SavePost,
+ EditCommunity,
+ FollowCommunity,
+ GetFollowedCommunities,
+ GetUserDetails,
+ GetReplies,
+ GetUserMentions,
+ EditUserMention,
+ GetModlog,
+ BanFromCommunity,
+ AddModToCommunity,
+ CreateSite,
+ EditSite,
+ GetSite,
+ AddAdmin,
+ BanUser,
+ Search,
+ MarkAllAsRead,
+ SaveUserSettings,
+ TransferCommunity,
+ TransferSite,
+ DeleteAccount,
+ PasswordReset,
+ PasswordChange,
+}
+
#[derive(Fail, Debug)]
-#[fail(display = "{{\"error\":\"{}\"}}", message)]
+#[fail(display = "{{\"op\":\"{}\", \"error\":\"{}\"}}", op, message)]
pub struct APIError {
+ pub op: String,
pub message: String,
}
impl APIError {
- pub fn err(msg: &str) -> Self {
+ pub fn err(op: &UserOperation, msg: &str) -> Self {
APIError {
+ op: op.to_string(),
message: msg.to_string(),
}
}
}
pub struct Oper {
+ op: UserOperation,
data: T,
}
impl Oper {
- pub fn new(data: T) -> Oper {
- Oper { data }
+ pub fn new(op: UserOperation, data: T) -> Oper {
+ Oper { op, data }
}
}
-pub trait Perform {
- type Response: serde::ser::Serialize + Send;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result;
+pub trait Perform {
+ fn perform(&self) -> Result
+ where
+ T: Sized;
}
diff --git a/server/src/api/post.rs b/server/src/api/post.rs
index 84ef89f1..4b2395a8 100644
--- a/server/src/api/post.rs
+++ b/server/src/api/post.rs
@@ -1,4 +1,5 @@
use super::*;
+use std::str::FromStr;
#[derive(Serialize, Deserialize)]
pub struct CreatePost {
@@ -6,12 +7,13 @@ pub struct CreatePost {
url: Option,
body: Option,
nsfw: bool,
- pub community_id: i32,
+ community_id: i32,
auth: String,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct PostResponse {
+ op: String,
pub post: PostView,
}
@@ -23,12 +25,12 @@ pub struct GetPost {
#[derive(Serialize, Deserialize)]
pub struct GetPostResponse {
+ op: String,
post: PostView,
comments: Vec,
community: CommunityView,
moderators: Vec,
admins: Vec,
- pub online: usize,
}
#[derive(Serialize, Deserialize)]
@@ -37,12 +39,13 @@ pub struct GetPosts {
sort: String,
page: Option,
limit: Option,
- pub community_id: Option,
+ community_id: Option,
auth: Option,
}
#[derive(Serialize, Deserialize)]
pub struct GetPostsResponse {
+ op: String,
posts: Vec,
}
@@ -53,6 +56,12 @@ pub struct CreatePostLike {
auth: String,
}
+#[derive(Serialize, Deserialize)]
+pub struct CreatePostLikeResponse {
+ op: String,
+ post: PostView,
+}
+
#[derive(Serialize, Deserialize)]
pub struct EditPost {
pub edit_id: i32,
@@ -77,49 +86,32 @@ pub struct SavePost {
auth: String,
}
-impl Perform for Oper {
- type Response = PostResponse;
-
- fn perform(
- &self,
- pool: Pool>,
- websocket_info: Option,
- ) -> Result {
+impl Perform for Oper {
+ fn perform(&self) -> Result {
let data: &CreatePost = &self.data;
+ let conn = establish_connection();
let claims = match Claims::decode(&data.auth) {
Ok(claims) => claims.claims,
- Err(_e) => return Err(APIError::err("not_logged_in").into()),
+ Err(_e) => return Err(APIError::err(&self.op, "not_logged_in"))?,
};
- if let Err(slurs) = slur_check(&data.name) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
-
- if let Some(body) = &data.body {
- if let Err(slurs) = slur_check(body) {
- return Err(APIError::err(&slurs_vec_to_str(slurs)).into());
- }
+ if has_slurs(&data.name) || (data.body.is_some() && has_slurs(&data.body.to_owned().unwrap())) {
+ return Err(APIError::err(&self.op, "no_slurs"))?;
}
let user_id = claims.id;
- let conn = pool.get()?;
-
// Check for a community ban
if CommunityUserBanView::get(&conn, user_id, data.community_id).is_ok() {
- return Err(APIError::err("community_ban").into());
+ return Err(APIError::err(&self.op, "community_ban"))?;
}
// Check for a site ban
if UserView::read(&conn, user_id)?.banned {
- return Err(APIError::err("site_ban").into());
+ return Err(APIError::err(&self.op, "site_ban"))?;
}
- // Fetch Iframely and Pictshare cached image
- let (iframely_title, iframely_description, iframely_html, pictshare_thumbnail) =
- fetch_iframely_and_pictshare_data(data.url.to_owned());
-
let post_form = PostForm {
name: data.name.to_owned(),
url: data.url.to_owned(),
@@ -132,23 +124,11 @@ impl Perform for Oper {
locked: None,
stickied: None,
updated: None,
- embed_title: iframely_title,
- embed_description: iframely_description,
- embed_html: iframely_html,
- thumbnail_url: pictshare_thumbnail,
};
let inserted_post = match Post::create(&conn, &post_form) {
Ok(post) => post,
- Err(e) => {
- let err_type = if e.to_string() == "value too long for type character varying(200)" {
- "post_title_too_long"
- } else {
- "couldnt_create_post"
- };
-
- return Err(APIError::err(err_type).into());
- }
+ Err(_e) => return Err(APIError::err(&self.op, "couldnt_create_post"))?,
};
// They like their own post by default
@@ -161,38 +141,26 @@ impl Perform for Oper