diff --git a/.gitignore b/.gitignore index 9a60ff83f..3f5eff64f 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,7 @@ npm-debug.log # we ignore priv/static. You may want to comment # this depending on your deployment strategy. /priv/static/ -/priv/geolix/ +/priv/geodb/ # Files matching config/*.secret.exs pattern contain sensitive # data and you should not commit them into version control. @@ -58,4 +58,4 @@ plausible-report.xml # Dializer /priv/plts/*.plt -/priv/plts/*.plt.hash \ No newline at end of file +/priv/plts/*.plt.hash diff --git a/CHANGELOG.md b/CHANGELOG.md index f16547d06..e3cd89d49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - Site switching keybinds (1-9 for respective sites) plausible/analytics#735 - Glob (wildcard) based pageview goals plausible/analytics#750 - Support for embedding shared links in an iframe plausible/analytics#812 +- Include a basic IP-To-Country database by default plausible/analytics#906 - Add name/label to shared links plausible/analytics#910 ### Fixed diff --git a/assets/js/dashboard/mount.js b/assets/js/dashboard/mount.js index c42dbc199..db86a5b18 100644 --- a/assets/js/dashboard/mount.js +++ b/assets/js/dashboard/mount.js @@ -15,7 +15,8 @@ if (container) { hasGoals: container.dataset.hasGoals === 'true', insertedAt: container.dataset.insertedAt, embedded: container.dataset.embedded, - background: container.dataset.background + background: container.dataset.background, + selfhosted: container.dataset.selfhosted === 'true' } const loggedIn = container.dataset.loggedIn === 'true' diff --git a/assets/js/dashboard/stats/countries.js b/assets/js/dashboard/stats/countries.js index 576a62fac..20dd363d0 100644 --- a/assets/js/dashboard/stats/countries.js +++ b/assets/js/dashboard/stats/countries.js @@ -125,13 +125,22 @@ class Countries extends React.Component { }); } + geolocationDbNotice() { + if (this.props.site.selfhosted) { + return ( + IP Geolocation by DB-IP + ) + } + } + renderBody() { if (this.state.countries) { return (

Countries

-
+
+ { this.geolocationDbNotice() }
) } diff --git a/config/runtime.exs b/config/runtime.exs index bdd58fef9..57cdfeec7 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -56,7 +56,7 @@ cron_enabled = String.to_existing_atom(System.get_env("CRON_ENABLED", "false")) custom_domain_server_ip = System.get_env("CUSTOM_DOMAIN_SERVER_IP") custom_domain_server_user = System.get_env("CUSTOM_DOMAIN_SERVER_USER") custom_domain_server_password = System.get_env("CUSTOM_DOMAIN_SERVER_PASSWORD") -geolite2_country_db = System.get_env("GEOLITE2_COUNTRY_DB") +geolite2_country_db = System.get_env("EOLITE2_COUNTRY_DB", "priv/geodb/dbip-country.mmdb") disable_auth = String.to_existing_atom(System.get_env("DISABLE_AUTH", "false")) disable_registration = String.to_existing_atom(System.get_env("DISABLE_REGISTRATION", "false")) hcaptcha_sitekey = System.get_env("HCAPTCHA_SITEKEY") @@ -243,7 +243,7 @@ config :kaffy, ] ] -if geolite2_country_db do +if config_env() != :test && geolite2_country_db do config :geolix, databases: [ %{ diff --git a/lib/mix/tasks/download_country_database.ex b/lib/mix/tasks/download_country_database.ex new file mode 100644 index 000000000..d6e63e34f --- /dev/null +++ b/lib/mix/tasks/download_country_database.ex @@ -0,0 +1,38 @@ +defmodule Mix.Tasks.DownloadCountryDatabase do + use Mix.Task + use Plausible.Repo + require Logger + + # coveralls-ignore-start + + def run(_) do + Application.ensure_all_started(:httpoison) + Application.ensure_all_started(:timex) + this_month = Timex.today() + last_month = Timex.shift(this_month, months: -1) + this_month = this_month |> Date.to_iso8601() |> binary_part(0, 7) + last_month = last_month |> Date.to_iso8601() |> binary_part(0, 7) + this_month_url = "https://download.db-ip.com/free/dbip-country-lite-#{this_month}.mmdb.gz" + last_month_url = "https://download.db-ip.com/free/dbip-country-lite-#{last_month}.mmdb.gz" + Logger.info("Downloading #{this_month_url}") + res = HTTPoison.get!(this_month_url) + + res = + case res.status_code do + 404 -> + Logger.info("Got 404 for #{this_month_url}, trying #{last_month_url}") + HTTPoison.get!(last_month_url) + + _ -> + res + end + + if res.status_code == 200 do + File.mkdir("priv/geodb") + File.write!("priv/geodb/dbip-country.mmdb", res.body) + Logger.info("Downloaded and saved the database successfully") + else + Logger.error("Unable to download and save the database. Response: #{inspect(res)}") + end + end +end diff --git a/lib/plausible_web/templates/stats/stats.html.eex b/lib/plausible_web/templates/stats/stats.html.eex index 8fd38ad8f..f6a9212f1 100644 --- a/lib/plausible_web/templates/stats/stats.html.eex +++ b/lib/plausible_web/templates/stats/stats.html.eex @@ -5,7 +5,7 @@ <% end %>
-
+
<%= if !@conn.assigns[:current_user] && @conn.assigns[:demo] do %>