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 %>