* Make a distinction between moderators and admins
And rework the user list in the moderation interface, to be able to run the same action on many users,
and to have a huge list of actions whithout loosing space.
* Make user's role an enum + make it impossible for a moderator to escalate privileges
With the help of diesel-derive-enum (maybe it could be used in other places too?)
Also, moderators are still able to grant or revoke moderation rights to other people, but maybe only admins should be able to do it?
* Cargo fmt
* copy/pasting is bad
* Remove diesel-derive-enum and use an integer instead
It was not compatible with both Postgres and SQlite, because for one it generated a schema
with the "User_role" type, but for the other it was "Text"…
* Reset translations
* Use an enum to avoid magic numbers + fix the tests
* Reset translations
* Fix down.sql
* Replace the input! macro with an Input builder
* Use a BTreeMap instead of an HashMap
Followinf @fdb-hiroshima's advice
* Rename Input::to_html to Input::html
To make clippy happy
* Wrap error messages in red paragraphs
* Theming
- Custom CSS for blogs
- Custom themes for instance
- New dark theme
- UI to choose your instance theme
- Option to disable blog themes if you prefer to only have the instance theme
- UI to choose a blog theme
* send scheme as part of webfinger remote follow template
fixtsileo/microblog.pub#49
* bump webfinger to 0.4.1
* cargo fmt
* revert translations
* Use group: prefix for blog webfinger queries
* initial RTL support
* fix dir in template-util
* fix dir in blogs new
* fix dir in blogs details
* fix dir in posts new
* fix dir in posts details
* fix dir in posts remote
* Fix dir in partials
some parts should be recheck carefully in real usage
* add enum containing all successful route returns
This enum derives `Responder`, so it can be used as route result.
We also implement `From`, so it can be converted
* disable clippy warning about this enum
There's no use trying to chase this warning.
The next warning will be about `Redirect`, which itself is 360 byte,
according to @fdb-hiroshima (thanks for the research!)
So, if anything, we can try to get Rocket to work on that!
* refactor routes/posts to only use one level of Result
* admin settings error is not an ErrorPage, so dont use Result<>
* refactor: use early return to remove indent of main logic
This diff is absolutely atrocious.
but the resulting readability is worth it
* refactor routes/post for early returns & RespondOrRedirect
* refactor routes/session for early returns & use RespondOrRedirect
* refactor routes/user -- add another field to enum
* refactor routes/blogs for early returns & RespondOrRedirect
* refactor routes/blogs for early returns & RespondOrRedirect
This is a final refactor of `pub fn update()` for readability.
We're removing at least one indentation level.
* add shrinkwraprs and implement Id thru it
This also means we can automatically convert Id to String without using
.into()!
* cleanup with the help of clippy!
* cleanup with the help of cargo fmt!
* remove extra block
* Shrinkwrap Page, ContentLen and RemoteForm
* translations
* Start to update the theme
- Ligther colors
- No more border radius
- Buttons are now always colored
- Start to redesign the post page (according to the Figma mockups)
* Fix build script: it now recompiles everytime a scss file changed
* Make sure the article illustrations are not too big
* Make articles wider (70 characters)
* Better contrast between gray shades
* Various improvements
* Better mobile style
* New style for the footer
* Improve comment style
* Better responsiveness again
* Limit the size of the article cover
* Last details?
- Improve buttons on the media page
- Improve lists
* Pin the stdweb version that we use
It changed because I removed Cargo.lock to handle a merge conflict
I could have updated cargo web too, but it mean I should have re-built
the CI docker image and it was taking forever.
* Better contrast for links in the header of the article
* Add a basic privacy policy
* Remove "also"
* Fix a few issues
- Don't watch static/css in build.rs
- Another shade of white
- Remove useless margin rule for error messages
* Add a way to display flash messages
* Make the flash messages look nice
* Add actual feedback messages
* cargo fmt
* Move flash messages to PlumeRocket
And add trait to convert PlumeRocket to BaseContext
* Remove useless lifetime
* import migrations via macro
* panic on database not to the latest migration
* add subcommand to plm
* create migration that run tantivy index creation
* remove diesel_cli from places it was
* use our migration system for tests
* create table __diesel_schema_migrations if needed
Add support for remote interaction ([this thing](https://eldritch.cafe/users/Barmaid/remote_follow) in mastodon)
- [x] create the endpoint dispatching remote interactions to local pages
- [x] add this endpoint to web-finger
- [x] propose remote interaction when following and not connected
- [x] propose remote interaction when liking/sharing and not connected
- [x] propose remote interaction when commenting and not connected
- [x] fetch posts/comments we don't know but remote interaction was requested for ?
* Big refactoring of the Inbox
We now have a type that routes an activity through the registered handlers
until one of them matches.
Each Actor/Activity/Object combination is represented by an implementation of AsObject
These combinations are then registered on the Inbox type, which will try to deserialize
the incoming activity in the requested types.
Advantages:
- nicer syntax: the final API is clearer and more idiomatic
- more generic: only two traits (`AsActor` and `AsObject`) instead of one for each kind of activity
- it is easier to see which activities we handle and which one we don't
* Small fixes
- Avoid panics
- Don't search for AP ID infinitely
- Code style issues
* Fix tests
* Introduce a new trait: FromId
It should be implemented for any AP object.
It allows to look for an object in database using its AP ID, or to dereference it if it was not present in database
Also moves the inbox code to plume-models to test it (and write a basic test for each activity type we handle)
* Use if let instead of match
* Don't require PlumeRocket::intl for tests
* Return early and remove a forgotten dbg!
* Add more tests to try to understand where the issues come from
* Also add a test for comment federation
* Don't check creation_date is the same for blogs
* Make user and blog federation more tolerant to errors/missing fields
* Make clippy happy
* Use the correct Accept header when dereferencing
* Fix follow approval with Mastodon
* Add spaces to characters that should not be in usernames
And validate blog names too
* Smarter dereferencing: only do it once for each actor/object
* Forgot some files
* Cargo fmt
* Delete plume_test
* Delete plume_tests
* Update get_id docs + Remove useless : Sized
* Appease cargo fmt
* Remove dbg! + Use as_ref instead of clone when possible + Use and_then instead of map when possible
* Remove .po~
* send unfollow to local instance
* read cover from update activity
* Make sure "cc" and "to" are never empty
and fix a typo in a constant name
* Cargo fmt
Upgrade rust-toolchain
Upgrade Tantivy
Warning: tantivy now use a different file format, search index may need to be deleted and recreated to work as intended
try to run compile twice in a row because sometime oomk is evil
* Update some UI strings for more natural English
* Correct message text
* Correct message text
* Update the strings everywhere
Because they are also used as base messages for other languages
* Implement find_for_comment for notifications
* Delete notifications when deleting a comment
This should tackle #463
* Apply rustfmt
* Implement `find_for_mention` and remove order by from `find_for_comment`
There is no need to order the notifications
* Delete notifications for mentions
* Fix notifications for comments and mentions
Also adds a parameter to `md_to_html` to only render inline elements (so that we don't have titles or images in blog descriptions). And moves the delete button for the blog on the edition page.
I still have to update the SQLite migration once others PRs with migrations will be merged.
Also, there will be a problem when you edit a blog while not owning its banner or icon: when validating they will be reset to their default values… I don't see a good solution to this until we have a better way to handle uploads with Rocket (the same is probably happening for articles btw).
And the icon/banner are not federated yet, I don't know if I should add it to this PR or if it can come after?
![image](https://user-images.githubusercontent.com/16254623/53894510-7d853300-4030-11e9-8a2c-f5c0b0c7f512.png)
![image](https://user-images.githubusercontent.com/16254623/53894539-8b3ab880-4030-11e9-8113-685a27be8d7c.png)
Fixes#453Fixes#454
We add clippy as our build — also rectifying the missing `plume-cli` build!
In the next step we follow clippy's advise and fix some of the "simple" mistakes in our code, such as style or map usage.
Finally, we refactor some hard bits that need extraction of new types, or refactoring of function call-types, especially those that thread thru macros, and, of course functions with ~15 parameters should probably be rethought.
* Slightly improve the media experience
- Use a grid to display the list of media
- Add icons for non-image media preview
- Paginate the gallery
- Add links to the gallery in the editor and in the profile settings to make it more discoverable when you need it
Fixes#432
* Allow video and audio tags in SafeString
Otherwise we can't display their preview, nor show them in articles
Also show controls by default for these two elements
* Show fallback images for audio and unknown files, to make them more visible
* Add a new constructor to SafeString when the input is trusted and doesn't need to be escaped.
And use it to generate media previews.
* Make it possible to insert video/audio in articles
* Password reset
* Various improvements and fixes for password reset
- Reorganize src/mail.rs to make it cleaner
- add a build_mail function
- only make the requests invalid after 2 hours
- avoid infintely-growing list of requests by deleting them once completed, or after 24 hours
- avoid sending many requests for the same user
- validate the password reset form
* Avoid locking so many times
Fix durations
* Remove old requests even if the current one is not valid
* Remove unused feature
* Also remove the custom_derive and plugin features while we are at it
* Forgot a 0 è_é
* Avoid panicking while owning a request lock
* Use master branch of lettre so that we can build with the latest OpenSSL
* Fix the debug mailer
Fix#433
I added the repo link to Cargo.toml so that `software.repository` could be configurable like @rhaamo suggested. I don't know if it's ok to include `software.repository` without bumping the schema version, but I didn't know if that would break any clients that parse nodeinfo with a hardcoded schema version.