@@ -161,11 +161,16 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok,
|
||||
%{
|
||||
instance_description: Config.instance_description(),
|
||||
instance_long_description: Config.instance_long_description(),
|
||||
instance_name: Config.instance_name(),
|
||||
registrations_open: Config.instance_registrations_open?(),
|
||||
contact: Config.contact(),
|
||||
instance_terms: Config.instance_terms(),
|
||||
instance_terms_type: Config.instance_terms_type(),
|
||||
instance_terms_url: Config.instance_terms_url(),
|
||||
instance_privacy_policy: Config.instance_privacy(),
|
||||
instance_privacy_policy_type: Config.instance_privacy_type(),
|
||||
instance_privacy_policy_url: Config.instance_privacy_url(),
|
||||
instance_rules: Config.instance_rules()
|
||||
}}
|
||||
end
|
||||
|
||||
@@ -41,6 +41,19 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
{:ok, %{body_html: body_html, type: type, url: url}}
|
||||
end
|
||||
|
||||
def privacy(_parent, %{locale: locale}, _resolution) do
|
||||
type = Config.instance_privacy_type()
|
||||
|
||||
{url, body_html} =
|
||||
case type do
|
||||
"URL" -> {Config.instance_privacy_url(), nil}
|
||||
"DEFAULT" -> {nil, Config.generate_privacy(locale)}
|
||||
_ -> {nil, Config.instance_privacy(locale)}
|
||||
end
|
||||
|
||||
{:ok, %{body_html: body_html, type: type, url: url}}
|
||||
end
|
||||
|
||||
defp config_cache do
|
||||
case Cachex.fetch(:config, "full_config", fn _key ->
|
||||
case build_config_cache() do
|
||||
@@ -58,8 +71,10 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
name: Config.instance_name(),
|
||||
registrations_open: Config.instance_registrations_open?(),
|
||||
registrations_whitelist: Config.instance_registrations_whitelist?(),
|
||||
contact: Config.contact(),
|
||||
demo_mode: Config.instance_demo_mode?(),
|
||||
description: Config.instance_description(),
|
||||
long_description: Config.instance_long_description(),
|
||||
anonymous: %{
|
||||
participation: %{
|
||||
allowed: Config.anonymous_participation?(),
|
||||
@@ -107,7 +122,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||
features: %{
|
||||
groups: Config.instance_group_feature_enabled?()
|
||||
},
|
||||
rules: Config.instance_rules()
|
||||
rules: Config.instance_rules(),
|
||||
version: Config.instance_version(),
|
||||
federating: Config.instance_federating()
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
19
lib/graphql/resolvers/statistics.ex
Normal file
19
lib/graphql/resolvers/statistics.ex
Normal file
@@ -0,0 +1,19 @@
|
||||
defmodule Mobilizon.GraphQL.Resolvers.Statistics do
|
||||
@moduledoc """
|
||||
Handles the statistics-related GraphQL calls.
|
||||
"""
|
||||
|
||||
alias Mobilizon.Service.Statistics, as: StatisticsModule
|
||||
|
||||
@doc """
|
||||
Gets config.
|
||||
"""
|
||||
def get_statistics(_parent, _params, _context) do
|
||||
{:ok,
|
||||
%{
|
||||
number_of_users: StatisticsModule.get_cached_value(:local_users),
|
||||
number_of_events: StatisticsModule.get_cached_value(:local_events),
|
||||
number_of_comments: StatisticsModule.get_cached_value(:local_comments)
|
||||
}}
|
||||
end
|
||||
end
|
||||
@@ -32,6 +32,7 @@ defmodule Mobilizon.GraphQL.Schema do
|
||||
import_types(Schema.ConfigType)
|
||||
import_types(Schema.ReportType)
|
||||
import_types(Schema.AdminType)
|
||||
import_types(Schema.StatisticsType)
|
||||
|
||||
@desc "A struct containing the id of the deleted object"
|
||||
object :deleted_object do
|
||||
@@ -137,6 +138,7 @@ defmodule Mobilizon.GraphQL.Schema do
|
||||
import_fields(:todo_queries)
|
||||
import_fields(:conversation_queries)
|
||||
import_fields(:resource_queries)
|
||||
import_fields(:statistics_queries)
|
||||
end
|
||||
|
||||
@desc """
|
||||
|
||||
@@ -75,9 +75,14 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
object :admin_settings do
|
||||
field(:instance_name, :string)
|
||||
field(:instance_description, :string)
|
||||
field(:instance_long_description, :string)
|
||||
field(:contact, :string)
|
||||
field(:instance_terms, :string)
|
||||
field(:instance_terms_type, :instance_terms_type)
|
||||
field(:instance_terms_url, :string)
|
||||
field(:instance_privacy_policy, :string)
|
||||
field(:instance_privacy_policy_type, :instance_privacy_type)
|
||||
field(:instance_privacy_policy_url, :string)
|
||||
field(:instance_rules, :string)
|
||||
field(:registrations_open, :boolean)
|
||||
end
|
||||
@@ -88,6 +93,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
value(:custom, as: "CUSTOM")
|
||||
end
|
||||
|
||||
enum :instance_privacy_type do
|
||||
value(:url, as: "URL")
|
||||
value(:default, as: "DEFAULT")
|
||||
value(:custom, as: "CUSTOM")
|
||||
end
|
||||
|
||||
object :admin_queries do
|
||||
@desc "Get the list of action logs"
|
||||
field :action_logs, type: list_of(:action_log) do
|
||||
@@ -151,9 +162,14 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||
field :save_admin_settings, type: :admin_settings do
|
||||
arg(:instance_name, :string)
|
||||
arg(:instance_description, :string)
|
||||
arg(:instance_long_description, :string)
|
||||
arg(:contact, :string)
|
||||
arg(:instance_terms, :string)
|
||||
arg(:instance_terms_type, :instance_terms_type)
|
||||
arg(:instance_terms_url, :string)
|
||||
arg(:instance_privacy_policy, :string)
|
||||
arg(:instance_privacy_policy_type, :instance_privacy_type)
|
||||
arg(:instance_privacy_policy_url, :string)
|
||||
arg(:instance_rules, :string)
|
||||
arg(:registrations_open, :boolean)
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
# Instance name
|
||||
field(:name, :string)
|
||||
field(:description, :string)
|
||||
field(:long_description, :string)
|
||||
field(:contact, :string)
|
||||
|
||||
field(:registrations_open, :boolean)
|
||||
field(:registrations_whitelist, :boolean)
|
||||
@@ -23,12 +25,19 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
field(:resource_providers, list_of(:resource_provider))
|
||||
field(:timezones, list_of(:string))
|
||||
field(:features, :features)
|
||||
field(:version, :string)
|
||||
field(:federating, :boolean)
|
||||
|
||||
field(:terms, :terms, description: "The instance's terms") do
|
||||
arg(:locale, :string, default_value: "en")
|
||||
resolve(&Config.terms/3)
|
||||
end
|
||||
|
||||
field(:privacy, :privacy, description: "The instance's privacy policy") do
|
||||
arg(:locale, :string, default_value: "en")
|
||||
resolve(&Config.privacy/3)
|
||||
end
|
||||
|
||||
field(:rules, :string, description: "The instance's rules")
|
||||
end
|
||||
|
||||
@@ -38,6 +47,12 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||
field(:body_html, :string)
|
||||
end
|
||||
|
||||
object :privacy do
|
||||
field(:url, :string)
|
||||
field(:type, :instance_privacy_type)
|
||||
field(:body_html, :string)
|
||||
end
|
||||
|
||||
object :lonlat do
|
||||
field(:longitude, :float)
|
||||
field(:latitude, :float)
|
||||
|
||||
23
lib/graphql/schema/statistics.ex
Normal file
23
lib/graphql/schema/statistics.ex
Normal file
@@ -0,0 +1,23 @@
|
||||
defmodule Mobilizon.GraphQL.Schema.StatisticsType do
|
||||
@moduledoc """
|
||||
Schema representation for Statistics
|
||||
"""
|
||||
use Absinthe.Schema.Notation
|
||||
|
||||
alias Mobilizon.GraphQL.Resolvers.Statistics
|
||||
|
||||
@desc "A statistics object"
|
||||
object :statistics do
|
||||
# Instance name
|
||||
field(:number_of_users, :integer, description: "The number of local users")
|
||||
field(:number_of_events, :integer, description: "The number of local events")
|
||||
field(:number_of_comments, :integer, description: "The number of local comments")
|
||||
end
|
||||
|
||||
object :statistics_queries do
|
||||
@desc "Get the instance statistics"
|
||||
field :statistics, :statistics do
|
||||
resolve(&Statistics.get_statistics/3)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -5,6 +5,7 @@ defmodule Mobilizon.Config do
|
||||
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Service.GitStatus
|
||||
|
||||
@spec instance_config :: keyword
|
||||
def instance_config, do: Application.get_env(:mobilizon, :instance)
|
||||
@@ -27,28 +28,62 @@ defmodule Mobilizon.Config do
|
||||
instance_config()[:description]
|
||||
)
|
||||
|
||||
@spec instance_long_description :: String.t()
|
||||
def instance_long_description,
|
||||
do:
|
||||
Mobilizon.Admin.get_admin_setting_value(
|
||||
"instance",
|
||||
"instance_long_description"
|
||||
)
|
||||
|
||||
@spec contact :: String.t()
|
||||
def contact do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "contact")
|
||||
end
|
||||
|
||||
@spec instance_terms(String.t()) :: String.t()
|
||||
def instance_terms(locale \\ "en") do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms", generate_terms(locale))
|
||||
end
|
||||
|
||||
@spec instance_terms :: String.t()
|
||||
@spec instance_terms_type :: String.t()
|
||||
def instance_terms_type do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms_type", "DEFAULT")
|
||||
end
|
||||
|
||||
@spec instance_terms :: String.t()
|
||||
@spec instance_terms_url :: String.t()
|
||||
def instance_terms_url do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms_url")
|
||||
end
|
||||
|
||||
@spec instance_privacy(String.t()) :: String.t()
|
||||
def instance_privacy(locale \\ "en") do
|
||||
Mobilizon.Admin.get_admin_setting_value(
|
||||
"instance",
|
||||
"instance_privacy_policy",
|
||||
generate_privacy(locale)
|
||||
)
|
||||
end
|
||||
|
||||
@spec instance_privacy_type :: String.t()
|
||||
def instance_privacy_type do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_privacy_policy_type", "DEFAULT")
|
||||
end
|
||||
|
||||
@spec instance_privacy_url :: String.t()
|
||||
def instance_privacy_url do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_privacy_policy_url")
|
||||
end
|
||||
|
||||
@spec instance_rules :: String.t()
|
||||
def instance_rules do
|
||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_rules")
|
||||
end
|
||||
|
||||
@spec instance_version :: String.t()
|
||||
def instance_version, do: Mix.Project.config()[:version]
|
||||
def instance_version do
|
||||
GitStatus.commit()
|
||||
end
|
||||
|
||||
@spec instance_hostname :: String.t()
|
||||
def instance_hostname, do: instance_config()[:hostname]
|
||||
@@ -84,7 +119,10 @@ defmodule Mobilizon.Config do
|
||||
|
||||
@spec instance_user_agent :: String.t()
|
||||
def instance_user_agent,
|
||||
do: "#{instance_name()} #{instance_hostname()} - Mobilizon #{Mix.Project.config()[:version]}"
|
||||
do: "#{instance_name()} #{instance_hostname()} - Mobilizon #{instance_version()}"
|
||||
|
||||
@spec instance_federating :: String.t()
|
||||
def instance_federating, do: instance_config()[:federating]
|
||||
|
||||
@spec instance_geocoding_provider :: atom()
|
||||
def instance_geocoding_provider,
|
||||
@@ -255,7 +293,38 @@ defmodule Mobilizon.Config do
|
||||
Phoenix.View.render_to_string(
|
||||
Mobilizon.Web.APIView,
|
||||
"terms.html",
|
||||
[]
|
||||
%{
|
||||
instance_name: instance_name(),
|
||||
instance_url: instance_hostname(),
|
||||
instance_contact: instance_contact_html()
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
def generate_privacy(locale) do
|
||||
import Mobilizon.Web.Gettext
|
||||
put_locale(locale)
|
||||
|
||||
Phoenix.View.render_to_string(
|
||||
Mobilizon.Web.APIView,
|
||||
"privacy.html",
|
||||
%{instance_name: instance_name()}
|
||||
)
|
||||
end
|
||||
|
||||
defp instance_contact_html do
|
||||
contact = contact()
|
||||
|
||||
cond do
|
||||
String.contains?(contact, "@") ->
|
||||
"<a href=\"mailto:#{contact}\">#{contact}</a>"
|
||||
|
||||
String.match?(contact, ~r/^https?:\/\//) ->
|
||||
%URI{host: host} = URI.parse(contact)
|
||||
"<a href=\"#{contact}\">#{host}</a>"
|
||||
|
||||
true ->
|
||||
contact
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
21
lib/service/git_status.ex
Normal file
21
lib/service/git_status.ex
Normal file
@@ -0,0 +1,21 @@
|
||||
defmodule Mobilizon.Service.GitStatus do
|
||||
@moduledoc """
|
||||
See https://github.com/CrowdHailer/git_status/
|
||||
"""
|
||||
require Logger
|
||||
|
||||
@commit (case System.cmd("git", ["describe", "--tags", "--dirty"]) do
|
||||
{hash, 0} ->
|
||||
String.trim(hash)
|
||||
|
||||
_ ->
|
||||
Logger.warn("Could not read git commit hash")
|
||||
"UNKNOWN"
|
||||
end)
|
||||
|
||||
@doc """
|
||||
The git commit hash read at compile time, if present
|
||||
"""
|
||||
@spec commit :: String.t()
|
||||
def commit, do: @commit
|
||||
end
|
||||
119
lib/web/templates/api/privacy.html.eex
Normal file
119
lib/web/templates/api/privacy.html.eex
Normal file
@@ -0,0 +1,119 @@
|
||||
<article class="message">
|
||||
<p class="message-body">
|
||||
<%= pgettext("terms", "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We provide <a href=\"/glossary\">a glossary</a> to help you understand them better.") |> raw %>
|
||||
</p>
|
||||
</article>
|
||||
<h3><%= pgettext("terms", "What information do we collect?") %></h3>
|
||||
<ul>
|
||||
<li>
|
||||
<b><%= pgettext("terms", "Basic account information") %></b>
|
||||
<p><%= pgettext(
|
||||
"terms",
|
||||
"We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter <b>an e-mail address, a password</b> (hashed) and at least <b>an username</b>. Your e-mail address will be verified by an email containing a unique link. If that link is visited, we know that you control the e-mail address. You may also enter additional profile information such as <b>a display name and biography, and upload a profile picture and header image</b>. The username, display name, biography, profile picture and header image <b>are always listed publicly</b>. <b>You may however visit this instance without registering</b>."
|
||||
) |> raw %>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<b><%= pgettext("terms", "Published events and comments") %></b>
|
||||
<p>
|
||||
<%= pgettext(
|
||||
"terms",
|
||||
"Your <b>events</b> and <b>comments</b> are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to events features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and informations, and that recipients may screenshot, copy or otherwise re-share them."
|
||||
) |> raw %>
|
||||
</p>
|
||||
<p>
|
||||
<b><%= pgettext("terms", "Do not share any dangerous information over Mobilizon.") %></b>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<b><%= pgettext("terms", "IPs and other metadata") %></b>
|
||||
<p>
|
||||
<%= pgettext("terms", "We also may retain server logs which include the IP address of every request to our server.") %>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3><%= pgettext("terms", "What do we use your information for?") %></h3>
|
||||
<p><%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"Any of the information we collect from you may be used in the following ways:"
|
||||
)
|
||||
%></p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to
|
||||
interact with other people's content and post your own content if you are logged in.") %></li>
|
||||
<li><%= pgettext("terms", "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban
|
||||
evasion or other violations.") %></li>
|
||||
<li><%= pgettext("terms", "The email address you provide may be used to send you information, updates and notifications about other people
|
||||
interacting with your content or sending you messages and to respond to inquiries, and/or other requests or
|
||||
questions.") %></li>
|
||||
</ul>
|
||||
<h3 class="title"><%= pgettext("terms", "How do we protect your information?") %></h3>
|
||||
<p>
|
||||
<%=
|
||||
pgettext("terms", "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm.")
|
||||
%>
|
||||
</p>
|
||||
<h3 class="title"><%= pgettext("terms", "What is our data retention policy?") %></h3>
|
||||
<p><%= pgettext("terms", "We will make a good faith effort to:") %></p>
|
||||
<ul>
|
||||
<li>
|
||||
<%= pgettext("terms", "Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more than 90 days.")%>
|
||||
</li>
|
||||
<li>
|
||||
<%= pgettext("terms", "Retain the IP addresses associated with registered users no more than 12 months.") %>
|
||||
</li>
|
||||
</ul>
|
||||
<p><%= pgettext("terms", "You may irreversibly delete your account at any time.") %></p>
|
||||
<h3 class="title"><%= pgettext("terms", "Do we use cookies?") %></h3>
|
||||
<p><%=
|
||||
pgettext("terms", "We store the following information on your device when you connect:")
|
||||
%>
|
||||
</p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "An internal user ID") %></li>
|
||||
<li><%= pgettext("terms", "An internal ID for your current selected identity") %></li>
|
||||
<li><%= pgettext("terms", "Tokens to authenticate you") %></li>
|
||||
</ul>
|
||||
<p><%= pgettext("terms", "If you delete these informations, you need to login again.") %></p>
|
||||
<p><%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting these informations will only stop displaying participation status in your browser."
|
||||
)
|
||||
%>
|
||||
</p>
|
||||
<em>
|
||||
<%= pgettext("terms", "Note: These informations are stored in your localStorage and not your cookies.") %>
|
||||
</em>
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Do we disclose any information to outside parties?")
|
||||
%></h3>
|
||||
<p>
|
||||
<%=
|
||||
pgettext("terms", "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.")
|
||||
%>
|
||||
</p>
|
||||
<p>
|
||||
<%=
|
||||
pgettext("terms", "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is fowarded to all the instances of all the members of the group, in so far as these members reside on a different instance than this one.")
|
||||
%>
|
||||
</p>
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Site usage by children")
|
||||
%></h3>
|
||||
<p>
|
||||
<%= pgettext("terms", "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation</a>) do not use this site.") |> raw %>
|
||||
</p>
|
||||
<p>
|
||||
<%= pgettext("terms", "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) do not use this site.") |> raw %>
|
||||
</p>
|
||||
<p>
|
||||
<%= pgettext("terms", "Law requirements can be different if this server is in another jurisdiction.") %>
|
||||
</p>
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Changes to our Privacy Policy")
|
||||
%></h3>
|
||||
<p><%= pgettext("terms", "If we decide to change our privacy policy, we will post those changes on this page.") %></p>
|
||||
<p><%= pgettext("terms", "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 18, 2020.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "Originally adapted from the <a href=\"https://mastodon.social/terms\">Mastodon</a> and <a href=\"https://github.com/discourse/discourse\">Discourse</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>.") |> raw %></p>
|
||||
@@ -1,163 +1,98 @@
|
||||
<h3><%= pgettext("terms", "What information do we collect?") %></h3>
|
||||
<ul>
|
||||
<li>
|
||||
<em><%= pgettext("terms", "Basic account information") %></em>
|
||||
<p><%= pgettext(
|
||||
"terms",
|
||||
"We collect information from you when you register on this server and gather data when you participate in the
|
||||
platform by reading, writing, and interacting with content shared here. If you register on this server, you will
|
||||
be asked to enter an e-mail address, a password and at least an username. Your e-mail address will be verified by
|
||||
an email containing a unique link. If that link is visited, we know that you control the e-mail address. You may
|
||||
also enter additional profile information such as a display name and biography, and upload a profile picture and
|
||||
header image. The username, display name, biography, profile picture and header image are always listed publicly.
|
||||
You may, however, visit this server without registering."
|
||||
) %>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<em><%= pgettext("terms", "Published events and comments") %></em>
|
||||
<p>
|
||||
<%= pgettext(
|
||||
"terms",
|
||||
"Your events and comments are delivered to other instances that follow your own, meaning they are delivered to
|
||||
different servers and copies are stored there. When you delete events or comments, this is likewise delivered to
|
||||
these other instances. The action of joining an event is federated as well. Please keep in mind that the operators
|
||||
of the server and any receiving server may view such messages, and that recipients may screenshot, copy or
|
||||
otherwise re-share them."
|
||||
) %>
|
||||
<em><%= pgettext("terms", "Do not share any dangerous information over Mobilizon.") %></em>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<em><%= pgettext("terms", "IPs and other metadata") %></em>
|
||||
<p>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"We also may retain server logs which include the IP address of every request to our server."
|
||||
)
|
||||
%>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3><%= pgettext("terms", "What do we use your information for?") %></h3>
|
||||
<p><%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"Any of the information we collect from you may be used in the following ways:"
|
||||
)
|
||||
%></p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to
|
||||
interact with other people's content and post your own content if you are logged in.") %></li>
|
||||
<li><%= pgettext("terms", "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban
|
||||
evasion or other violations.") %></li>
|
||||
<li><%= pgettext("terms", "The email address you provide may be used to send you information, updates and notifications about other people
|
||||
interacting with your content or sending you messages and to respond to inquiries, and/or other requests or
|
||||
questions.") %></li>
|
||||
</ul>
|
||||
<h3 class="title"><%= pgettext("terms", "How do we protect your information?") %></h3>
|
||||
<article class="message is-primary">
|
||||
<div class="message-body">
|
||||
<h3><%= pgettext("terms", "Short version") %></h3>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "Your content is yours") %></li>
|
||||
<li><%= pgettext("terms", "<b>%{instance_name}</b> will not use or transmit or resell your personal data", %{instance_name: @instance_name}) |> raw %></li>
|
||||
<li><%= pgettext("terms", "You must respect the law when using <b>%{instance_name}</b>", %{instance_name: @instance_name}) |> raw %></li>
|
||||
<li><%= pgettext("terms", "You must respect other people and <b>%{instance_name}</b>'s rules when using the service", %{instance_name: @instance_name}) |> raw %></li>
|
||||
<li><%= pgettext("terms", "The service is provided without warranties and these terms may change in the future") %></li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
<article class="message">
|
||||
<p class="message-body">
|
||||
<%= pgettext("terms", "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We provide <a href=\"/glossary\">a glossary</a> to help you understand them better.") |> raw %>
|
||||
</p>
|
||||
</article>
|
||||
<p><%= pgettext("terms", "Here are the important things you need to know about accessing and using the <b>%{instance_name}</b> (<a href=\"https://%{instance_url}\">%{instance_url}</a>) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully.", %{instance_name: @instance_name, instance_url: @instance_url}) |> raw %></p>
|
||||
<p>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"We implement a variety of security measures to maintain the safety of your personal information when you enter,
|
||||
submit, or access your personal information. Among other things, your browser session, as well as the traffic between
|
||||
your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way
|
||||
algorithm."
|
||||
)
|
||||
%>
|
||||
<%= pgettext("terms", "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by <a href=\"https://framasoft.org\">Framasoft</a>, a french not-for-profit popular educational organization advocating for Free/Libre Software. Unless explicity stated, this Mobilizon instance is an independant service using Mobilizon's source code. You may find more informations about this instance on the <a href=\"/about/instance\">\"About this instance\" page</a>.") |> raw %>
|
||||
</p>
|
||||
<h3 class="title"><%= pgettext("terms", "What is our data retention policy?") %></h3>
|
||||
<p><%= pgettext("terms", "We will make a good faith effort to:") %></p>
|
||||
<ul>
|
||||
<li><%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"Retain server logs containing the IP address of all requests to this server, in so far as such logs are kept, no more
|
||||
than 90 days."
|
||||
)%>
|
||||
</li>
|
||||
<li>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"Retain the IP addresses associated with registered users no more than 12 months."
|
||||
)
|
||||
%>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- Accept -->
|
||||
<h3><%= pgettext("terms", "Accepting these Terms") %></h3>
|
||||
<p><%= pgettext("terms", "If you access or use the Service, it means you agree to be bound by all of the terms below. So, before you use the Service, please read all of the terms. If you don't agree to all of the terms below, please do not use the Service. Also, if a term does not make sense to you, please let us know by contacting %{contact}.", %{contact: @instance_contact}) |> raw %></p>
|
||||
<!-- Changes -->
|
||||
<h3>
|
||||
<%= pgettext("terms", "Changes to these Terms") %>
|
||||
</h3>
|
||||
<p>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"You can request and download an archive of your content, including your posts, media attachments, profile picture,
|
||||
and header image."
|
||||
)
|
||||
%>
|
||||
</p>
|
||||
|
||||
<p><%= pgettext("terms", "You may irreversibly delete your account at any time.") %></p>
|
||||
<h3 class="title"><%= pgettext("terms", "Do we use cookies?") %></h3>
|
||||
<p><%=
|
||||
pgettext("terms", "We store the following information on your device when you connect:")
|
||||
%>
|
||||
</p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "An internal user ID") %></li>
|
||||
<li><%= pgettext("terms", "An internal ID for your current selected identity") %></li>
|
||||
<li><%= pgettext("terms", "Tokens to authenticate you") %></li>
|
||||
</ul>
|
||||
<p><%= pgettext("terms", "If you delete these informations, you need to login again.") %></p>
|
||||
<p><%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"If you're not connected, we don't store any information on your device, unless you participate in an event
|
||||
anonymously. In that case we store the hash of the UUID and participation status in your browser so that we may
|
||||
display participation status. Deleting these informations will only stop displaying participation status in your
|
||||
browser."
|
||||
)
|
||||
%>
|
||||
</p>
|
||||
<em>
|
||||
<%= pgettext("terms", "Note: These informations are stored in your localStorage and not your cookies.") %>
|
||||
</em>
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Do we disclose any information to outside parties?")
|
||||
%></h3>
|
||||
<p>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This
|
||||
does not include trusted third parties who assist us in operating our site, conducting our business, or servicing
|
||||
you, so long as those parties agree to keep this information confidential. We may also release your information
|
||||
when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or
|
||||
others rights, property, or safety."
|
||||
)
|
||||
%>
|
||||
<%= pgettext("terms", "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature or for some other reason.") %>
|
||||
</p>
|
||||
<p>
|
||||
<%=
|
||||
pgettext(
|
||||
"terms",
|
||||
"Your content may be downloaded by other servers in the network. Your content is delivered to the servers
|
||||
following your instance, and direct messages are delivered to the servers of the recipients, in so far as these
|
||||
recipients reside on a different server than this one."
|
||||
)
|
||||
%>
|
||||
<%= pgettext("terms", "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms.") %>
|
||||
</p>
|
||||
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Site usage by children")
|
||||
%></h3>
|
||||
<p><%= pgettext("terms", "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation</a>) do not use this site.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) do not use this site.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "Law requirements can be different if this server is in another jurisdiction.") %></p>
|
||||
|
||||
<h3 class="title"><%=
|
||||
pgettext("terms", "Changes to our Privacy Policy")
|
||||
%></h3>
|
||||
<p><%= pgettext("terms", "If we decide to change our privacy policy, we will post those changes on this page.") %></p>
|
||||
<p><%= pgettext("terms", "This document is CC-BY-SA. It was last updated January 16, 2020.") %></p>
|
||||
<p><%= pgettext("terms", "Originally adapted from the <a href=\"https://mastodon.social/terms\">Mastodon</a> and <a href=\"https://github.com/discourse/discourse\">Discourse</a> privacy policies.") |> raw %></p>
|
||||
<p>
|
||||
<%= pgettext("terms", "If you continue to use the Service after the revised Terms go into effect, then you have accepted the revised Terms.") %>
|
||||
</p>
|
||||
<!-- Privacy policy -->
|
||||
<h3><%= pgettext("terms", "Privacy Policy") %></h3>
|
||||
<p><%= pgettext("terms", "For information about how we collect and use information about users of the Service, please check out our <a href=\"/privacy\">privacy policy</a>.") |> raw %></p>
|
||||
<!-- Account security -->
|
||||
<h3><%= pgettext("terms", "Creating Accounts") %></h3>
|
||||
<p><%= pgettext("terms", "When you create an account you also agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to <b>%{instance_name}</b>.", %{instance_name: @instance_name}) |> raw %></p>
|
||||
<p><%= pgettext("terms", "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact <a href=\"https://framagit.org/framasoft/mobilizon/\">its contributors</a> directly.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "We will not be liable for any loss that you may incur as a result of someone else using your email or password, either with or without your knowledge.") %></p>
|
||||
<!-- Your content -->
|
||||
<h3><%= pgettext("terms", "Your Content & Conduct") %></h3>
|
||||
<p><%= pgettext("terms", "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness.") %></p>
|
||||
<p><%= pgettext("terms", "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens strictly only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set.") %></p>
|
||||
<p><%= pgettext("terms", "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than you had intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service.") %></p>
|
||||
<p><%= pgettext("terms", "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system.") %></p>
|
||||
<p><%= pgettext("terms", "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible.") %></p>
|
||||
<p><%= pgettext("terms", "In order to make <b>%{instance_name}</b> a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:", %{instance_name: @instance_name}) |> raw %></p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "Content that is illegal or unlawful, that would otherwise create liability;") %></li>
|
||||
<li><%= pgettext("terms", "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;") %></li>
|
||||
<li><%= pgettext("terms", "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and") %></li>
|
||||
<li><%= pgettext("terms", "Viruses, corrupted data or other harmful, disruptive or destructive files or code.") %></li>
|
||||
</ul>
|
||||
<p><%= pgettext("terms", "Also, you agree that you will not do any of the following in connection with the Service or other users:") %></p>
|
||||
<ul>
|
||||
<li><%= pgettext("terms", "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;") %></li>
|
||||
<li><%= pgettext("terms", "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;") %></li>
|
||||
<li><%= pgettext("terms", "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;") %></li>
|
||||
<li><%= pgettext("terms", "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties.") %></li>
|
||||
</ul>
|
||||
<p>
|
||||
<%= pgettext("terms", "Finally, your use of the Service is also subject to acceptance of <a href=\"/rules\">the instance's own specific rules</a> regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended.") |> raw %>
|
||||
</p>
|
||||
<h3>
|
||||
<%= pgettext("terms", "Our responsability") %>
|
||||
</h3>
|
||||
<p>
|
||||
<%= pgettext("terms", "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful.") %>
|
||||
</p>
|
||||
<p>
|
||||
<%= pgettext("terms", "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules.") %>
|
||||
</p>
|
||||
<h3><%= pgettext("terms", "Source code") %></h3>
|
||||
<p><%= pgettext("terms", "This Service runs on a Mobilizon instance. This source code is licensed under an <a href=\"https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)\">AGPLv3 license</a> which means you are allowed to and even encouraged to take the source code, modify it and use it.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "For full details about the Mobilizon software <a href=\"https://joinmobilizon.org\">see here</a>.") |> raw %></p>
|
||||
<!-- Links -->
|
||||
<h3><%= pgettext("terms", "Hyperlinks and Third Party Content") %></h3>
|
||||
<p><%= pgettext("terms", "<b>%{instance_name}</b> makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by <b>%{instance_name}</b> of the site. Use of any such linked website is at the user's own risk.", %{instance_name: @instance_name}) |> raw %></p>
|
||||
<p><%= pgettext("terms", "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content.") %></p>
|
||||
<!-- Termination -->
|
||||
<h3><%= pgettext("terms", "Termination") %></h3>
|
||||
<p><%= pgettext("terms", "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service.") %></p>
|
||||
<h3><%= pgettext("terms", "Entire Agreement") %></h3>
|
||||
<p><%= pgettext("terms", "These Terms constitute the entire agreement between you and <b>%{instance_name}</b> regarding the use of the Service, superseding any prior agreements between you and <b>%{instance_name}</b> relating to your use of the Service.", %{instance_name: @instance_name}) |> raw %></p>
|
||||
<!-- Feedback -->
|
||||
<h3><%= pgettext("terms", "Feedback") %></h3>
|
||||
<p><%= pgettext("terms", "We love feedback. Please let us know what you think of the Service, these Terms and, in general, <b>%{instance_name}</b>.", %{instance_name: @instance_name}) |> raw %></p>
|
||||
<!-- Questions -->
|
||||
<h3><%= pgettext("terms", "Questions & Contact Information") %></h3>
|
||||
<p><%= pgettext("terms", "Questions or comments about the Service may be directed to us at %{contact}", %{contact: @instance_contact}) |> raw %></p>
|
||||
<p><%= pgettext("terms", "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 22, 2020.") |> raw %></p>
|
||||
<p><%= pgettext("terms", "Originally adapted from the <a href=\"https://joindiaspora.com/terms\">Diaspora*</a> and <a href=\"https://github.com/appdotnet/terms-of-service\">App.net</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>.") |> raw %></p>
|
||||
|
||||
Reference in New Issue
Block a user