Somewhat experimental and sporadically maintained fork of a fork of a fork of Mastodon https://girldick.gay
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Go to file
santiagorodriguez96 e8d41bc2fe
Add WebAuthn as an alternative 2FA method (#14466)
* feat: add possibility of adding WebAuthn security keys to use as 2FA

This adds a basic UI for enabling WebAuthn 2FA. We did a little refactor
to the Settings page for editing the 2FA methods – now it will list the
methods that are available to the user (TOTP and WebAuthn) and from
there they'll be able to add or remove any of them.
Also, it's worth mentioning that for enabling WebAuthn it's required to
have TOTP enabled, so the first time that you go to the 2FA Settings
page, you'll be asked to set it up.
This work was inspired by the one donde by Github in their platform, and
despite it could be approached in different ways, we decided to go with
this one given that we feel that this gives a great UX.

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>

* feat: add request for WebAuthn as second factor at login if enabled

This commits adds the feature for using WebAuthn as a second factor for
login when enabled.
If users have WebAuthn enabled, now a page requesting for the use of a
WebAuthn credential for log in will appear, although a link redirecting
to the old page for logging in using a two-factor code will also be
present.

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>

* feat: add possibility of deleting WebAuthn Credentials

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>

* feat: disable WebAuthn when an Admin disables 2FA for a user

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>

* feat: remove ability to disable TOTP leaving only WebAuthn as 2FA

Following examples form other platforms like Github, we decided to make
Webauthn 2FA secondary to 2FA with TOTP, so that we removed the
possibility of removing TOTP authentication only, leaving users with
just WEbAuthn as 2FA. Instead, users will have to click on 'Disable 2FA'
in order to remove second factor auth.
The reason for WebAuthn being secondary to TOPT is that in that way,
users will still be able to log in using their code from their phone's
application if they don't have their security keys with them – or maybe
even lost them.

* We had to change a little the flow for setting up TOTP, given that now
  it's possible to setting up again if you already had TOTP, in order to
  let users modify their authenticator app – given that now it's not
  possible for them to disable TOTP and set it up again with another
  authenticator app.
  So, basically, now instead of storing the new `otp_secret` in the
  user, we store it in the session until the process of set up is
  finished.
  This was because, as it was before, when users clicked on 'Edit' in
  the new two-factor methods lists page, but then went back without
  finishing the flow, their `otp_secret` had been changed therefore
  invalidating their previous authenticator app, making them unable to
  log in again using TOTP.

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>

* refactor: fix eslint errors

The PR build was failing given that linting returning some errors.
This commit attempts to fix them.

* refactor: normalize i18n translations

The build was failing given that i18n translations files were not
normalized.
This commits fixes that.

* refactor: avoid having the webauthn gem locked to a specific version

* refactor: use symbols for routes without '/'

* refactor: avoid sending webauthn disabled email when 2FA is disabled

When an admins disable 2FA for users, we were sending two mails
to them, one notifying that 2FA was disabled and the other to notify
that WebAuthn was disabled.
As the second one is redundant since the first email includes it, we can
remove it and send just one email to users.

* refactor: avoid creating new env variable for webauthn_origin config

* refactor: improve flash error messages for webauthn pages

Co-authored-by: Facundo Padula <facundo.padula@cedarcode.com>
4 years ago
.circleci Set bundle config in local file, and set path (#14351) 4 years ago
.github Add GitHub Sponsors 4 years ago
app Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
bin Fix `tootctl media remove-orphans` choking on unknown files in storage (#13765) 4 years ago
chart helm: bump default image tag to v3.2.0 (#14476) 4 years ago
config Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
db Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
dist Update nginx.conf (#13066) 4 years ago
lib Improve email address validation (#14565) 4 years ago
log Initial commit 8 years ago
nanobox Resync Nanobox files with the 2.9.0 release (#11083) 5 years ago
public Add emojis:generate_borders Rake task (#13773) 4 years ago
spec Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
streaming Fix destructuring error when unsubscribing without subscribing (#14566) 4 years ago
vendor Increase files checked by ESLint (#9705) 5 years ago
.buildpacks Remove nodejs buildpack from buildpacks (#14364) 4 years ago
.codeclimate.yml Bump eslint from 6.8.0 to 7.5.0 (#14454) 4 years ago
.dockerignore Add .bundle to .dockerignore (#7895) 6 years ago
.editorconfig Add final newline to locale files (#2890) 7 years ago
.env.nanobox Fix sample SAML_ACS_URL, SAML_ISSUER (#12669) 4 years ago
.env.production.sample Fix the wrong full documentation link (#14293) 4 years ago
.env.test Bump webpacker from 4.0.7 to 4.2.0 (#12416) 5 years ago
.env.vagrant Add a default DB_HOST to .env.vagrant for enable the streaming (#14030) 4 years ago
.eslintignore Increase files checked by ESLint (#9705) 5 years ago
.eslintrc.js Enable promise/catch-or-return allowFinally (#14289) 4 years ago
.foreman Replace sprockets/browserify with Webpack (#2617) 7 years ago
.gitattributes Add .gitattributes file to avoid unwanted CRLF (#3954) 7 years ago
.gitignore Change Redis#exists calls to Redis#exists? to avoid deprecation warning (#14191) 4 years ago
.haml-lint.yml Added haml-lint and fix warnings (#2773) 7 years ago
.nanoignore Remove Storybook (#4397) 7 years ago
.nvmrc Upgrade .nvmrc to Node.js 12 (#12906) 4 years ago
.profile Add ffmpeg and dependent packages as well as LD_LIBRARY_PATHs (#3276) 7 years ago
.rspec Adding a Mention model, test stubs 8 years ago
.rubocop.yml Fix rubocop warning (#14288) 4 years ago
.ruby-version Update .ruby-version (#13395) 4 years ago
.sass-lint.yml Fix sass-lint config (#10982) 5 years ago
.slugignore Remove Storybook (#4397) 7 years ago
.yarnclean Replace from scss-lint to sass-lint (#10958) 5 years ago
AUTHORS.md Update translators (#14374) 4 years ago
Aptfile Adjust Aptfile for Heroku-18 stack (#8588) 6 years ago
CHANGELOG.md Bump version to 3.2.0 (#14395) 4 years ago
CODE_OF_CONDUCT.md Add code of conduct from GitHub generator (#5674) 7 years ago
CONTRIBUTING.md Edit CONTRIBUTING.md (#12401) 5 years ago
Capfile remove capistrano/faster_assets from Capfile (#2737) 7 years ago
Dockerfile Update Dockerfile (#13582) 4 years ago
Gemfile Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
Gemfile.lock Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
LICENSE Fix #49 - License changed from GPL-2.0 to AGPL-3.0 8 years ago
Procfile Bind servers to 0.0.0.0 in Procfile (#11378) 5 years ago
Procfile.dev Fix Procfile on OS X (#6748) 6 years ago
README.md Fix translation platform to Crowdin (#13443) 4 years ago
Rakefile Initial commit 8 years ago
SECURITY.md Add Security Policy (#13946) 4 years ago
Vagrantfile Update Vagrant box to Bionic (#13384) 4 years ago
app.json Stop using heroku-buildpack-nodejs (#14341) 4 years ago
babel.config.js Remove unnecessary dependencies (#12533) 5 years ago
boxfile.yml Correct the Nanobox deploy hooks for order and context (#12663) 4 years ago
config.ru Fix rubocop issues, introduce usage of frozen literal to improve performance 8 years ago
crowdin.yml Update Crowdin configuration file 5 years ago
docker-compose.yml Update Elasticsearch from 6.1 to 6.8 in docker-compose.yml (Fix glitch-soc#1348) (#14016) 4 years ago
ide-helper.js Add JS IDE helper (#13012) 4 years ago
package.json Add WebAuthn as an alternative 2FA method (#14466) 4 years ago
postcss.config.js Increase files checked by ESLint (#9705) 5 years ago
priv-config TOR federation (#7875) 6 years ago
scalingo.json Remove deprecated config from Heroku and Scalingo (#11925) 5 years ago
yarn.lock Add WebAuthn as an alternative 2FA method (#14466) 4 years ago

README.md

Mastodon

GitHub release Build Status Code Climate Crowdin Docker Pulls

Mastodon is a free, open-source social network server based on ActivityPub where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub)!

Click below to learn more in a video:

Screenshot

Navigation

Features

No vendor lock-in: Fully interoperable with any conforming platform

It doesn't have to be Mastodon, whatever implements ActivityPub is part of the social network! Learn more

Real-time, chronological timeline updates

See the updates of people you're following appear in real-time in the UI via WebSockets. There's a firehose view as well!

Media attachments like images and short videos

Upload and view images and WebM/MP4 videos attached to the updates. Videos with no audio track are treated like GIFs; normal videos are looped - like vines!

Safety and moderation tools

Private posts, locked accounts, phrase filtering, muting, blocking and all sorts of other features, along with a reporting and moderation system. Learn more

OAuth2 and a straightforward REST API

Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Streaming APIs, resulting in a rich app ecosystem with a lot of choices!

Deployment

Tech stack:

  • Ruby on Rails powers the REST API and other web pages
  • React.js and Redux are used for the dynamic parts of the interface
  • Node.js powers the streaming API

Requirements:

  • PostgreSQL 9.5+
  • Redis 4+
  • Ruby 2.5+
  • Node.js 10.13+

The repository includes deployment configurations for Docker and docker-compose, but also a few specific platforms like Heroku, Scalingo, and Nanobox. The stand-alone installation guide is available in the documentation.

A Vagrant configuration is included for development purposes.

Contributing

Mastodon is free, open-source software licensed under AGPLv3.

You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Crowdin. To get started, take a look at CONTRIBUTING.md. If your contributions are accepted into Mastodon, you can request to be paid through our OpenCollective.

IRC channel: #mastodon on irc.freenode.net

License

Copyright (C) 2016-2020 Eugen Rochko & other Mastodon contributors (see AUTHORS.md)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.