#!/bin/sh
#
# Copyright 2009 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This script is part of the vivaldi package.
#
# It creates the repository configuration file for package updates, and it
# monitors that config to see if it has been disabled by the overly aggressive
# distro upgrade process (e.g.  intrepid -> jaunty). When this situation is
# detected, the respository will be re-enabled. If the respository is disabled
# for any other reason, this won't re-enable it.
#
# This functionality can be controlled by creating the $DEFAULTS_FILE and
# setting "repo_add_once" and/or "repo_reenable_on_distupgrade" to "true" or
# "false" as desired. An empty $DEFAULTS_FILE is the same as setting both values
# to "false".

# System-wide package configuration.
DEFAULTS_FILE="/etc/default/vivaldi"

# sources.list setting for vivaldi updates.
REPOCONFIG="deb [arch=amd64] https://repo.vivaldi.com/stable/deb/ stable main"
REPOCONFIGREGEX="deb (\[arch=[^]]*\bamd64\b[^]]*\][[:space:]]*) https?://repo.vivaldi.com/stable/deb/ stable main"

APT_GET="`command -v apt-get 2> /dev/null`"
APT_CONFIG="`command -v apt-config 2> /dev/null`"

SOURCES_PREAMBLE="### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.\n"

# import Vivaldi public key updates from Vivaldi repo
# Vivaldi public key updates

# Set variables for the locations of the apt trusted keyrings.
find_apt_trusted() {
  eval $("$APT_CONFIG" shell APT_TRUSTEDDIR 'Dir::Etc::trustedparts/d')
}

# Install the repository/package signing key (74C35BC8), if it isn't already.
install_key() {
  find_apt_trusted
  # ASCII-armored keyrings are only supported in apt 1.4 and later, but we must
  # continue supporting Trusty and Xenial which have older versions of apt, so
  # the keyring is installed as a binary blob.  base64 is used to decode the
  # ASCII keyring, which should always be available since it comes from the
  # coreutils.
  (base64 -d > "$APT_TRUSTEDDIR/vivaldi-74C35BC8.gpg") <<KEYDATA
mQINBGWvppIBEADEP5eQWayPrhnAs/AQtBAqt9KVkb5exVWsuuneyNgGBq7e8xrg
2Mh4A5+Szj1PwjGgJeAmY2g50gXHJ4rygchCZmxZ09vcBB+s7HXfzp0SNN+LEAzu
Pb0s5Vl4XFW4sgpglB06R65+tIfQJqyPUJK9I8of8417/IAu/kL8IQU93mH0CzIJ
7sK9PAN/LIwdcbDeGwuQJWYgZAlclBcLQc2uG/FBAsCxyBfyv8vSCcJrNXvmFJnS
b1iS903t7GXpOkeIXTt4TcjXQ56IqY+UeCgY7GVZ+3ej6d0x+smfay8o26qdbktl
kjoUSICun+8UdcXBhNjWqscQrv/9Z8h6In6OoyjSf0NtcppI+9UFB7csGm6ySZ5U
E65uUD8evDnocfXhxIiPMhfi01PAAO6CyLMCA9ZytzPZDrIUct13m4YMWdKRtE0I
TRO4FX9Ev0iKyhfS8WNQ95ZtDUZMTyqMeP88SyIOnxIhRRZSNCXnuzxZbPloEuEF
mPY45zRr2mvICZg3d4TLhm8tyvYPgC6C0cEaWcjgRZVKsVl1c4n8N//6GtmlhcrF
V1kbUNVwLt1H8GYsIs7EqyiEI44ciFCNJY+Xccze8LFjwsBz0ro6wvV5N5wA8tIG
RAc2H5qbEoESmd5sF85mnRlXxKF7hz1R8QtbEJCAhht8AifuukOPzdGS8QARAQAB
tDVWaXZhbGRpIFBhY2thZ2UgQ29tcG9zZXIgS0VZMTAgPHBhY2thZ2VyQHZpdmFs
ZGkuY29tPokCVAQTAQoAPhYhBMKiRFsOw7OWvVJuMfc5qsB0w1vIBQJlr6aSAhsD
BQkD3MUABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEPc5qsB0w1vI/pEP/jIc
X+DBSe26osMa1bYDHIGqkRhltLYY6Sjpp0R1l6rmtUuwSER8tuxeDlh2PzkmPwKi
WdvfW1jT1VPUS0RVeOV0Dg0LLH4mgbTGj9aXWLmX1j9QGuXWUasf+ozeHF/cjlDE
KfdzY7mFsDmwHyapZBky/e8szIIagBJBxvAFLgvvezY74RQ5P8RuhbYHY9Nv8LWj
21HhBvUv9sT0OFEtCGNF2VFFKRXjwy07M/hsLoFC4Z/vBBnDIpZlHZmCqqGwo9yg
4afozlIkqUbwJtNcyqybgZjC9wZRfnKGpD6wvDrhL3sSgqnvreQyCju+OWHn6X23
giBwmY7FFuoRi5H24o5qyifQ59UzrU5cgiJCttjBfMi2Zfzz1iCWd87+luw/V4HR
QBWPUGyY6Q9+/8UNEPPy/3kkg0DeuQVR1bogrIiUwqfgOhF1RoWiXONFGIETrykL
kTHlklz7Yc8K+xCrIr22YBwuuMp+953u/RH22m2HipIBwXehIN+p98lUuKpGtfwz
KGninsXPQeBALq++9ELWmtRkUJ0KzveNqTqFU7P1DlIcRXK/94KPK1JrRCu/2nhw
J5Z1EJuZdZ8pkRv7gKopnwIXnNQYjAlgk95ol0AQNmvDZ3qyPFJzN+TfDKbxG3ol
0ZEPYddcymvt8eUCpRmAEDQuX6Wv1JO/bkJIq26MuQINBGWvppIBEACldmKPWvDd
fOiYBgcaIytEDj+FQaLjLJtd/fsdF10cok6tatQpBo5UIvtQOHtdjIoL8udKGqT6
8Zm7+xxsUwOVCNoYhaIJg/IzU9FrjjZ0wqGQWGntdbcSweejQkzkFbCiWMoXTFEV
yac8ETwErpf2oRNb1n7zJtKN1ctJwGO/amVuy1XxLk/aEi0wC0zgkaSObZXxTSZH
IhZah+a0Ua31kD0hd3OriftQw1eqskDkgpPyUe0KRemGD7bJB+dtuQLF2w30AcPO
0ufPG6pK6Y6VOFCDIMFpfkYtbIIyhtyrAmvduXXFC+KxnCHuIi52b+PcP3E44WBt
7EE37jlxxErabzQN8GTnyvELnXA9eiShmwTIVfp+W3AsIT5C+J2TBcHn0ThJ3zL+
P5xzDgnZ/y3k5qIl5t+xrVmhGcSdZtzg6muyOT9pCXCaTpqjmMBqNGMLdBFgNoUq
lQ54/88eXlsSQDb0E7a/uQAKwKKU3i7rWt//wOwaW+6tW0TsK2th2RLBpje+3Shi
diOm1gAeyWhO5XcZYZndu65pnyrvuX3i2+rKkpTSkpGAF69i0cG2hXlOkjSjGnEp
2IhvE2erywZZAY+ktasQspoLD/oN6HZkZhG6wQ8I8N5cfs/D2VryZ2PHiCT2IHPg
a3lXl40sWDtzrBDtsQeiDeeZ+GCAbmqRdwARAQABiQI8BBgBCgAmFiEEwqJEWw7D
s5a9Um4x9zmqwHTDW8gFAmWvppICGwwFCQPcxQAACgkQ9zmqwHTDW8gCVg/+MwU6
P+Ii7Kdn2BXH+BeZCrlB6/5tMsbYkaMgidpxJe07CwLO1kIwiR9EmepbcJbq2qGd
I8KNwb9hIl3mEkn5gmin9NfAo+WozeHZi3y1L4XIxlPLZqs3rn5iMPfqJSwbo59J
CUtJsYU8btL6dcWFcgUoqF/DN20VvrS837Ro0NppNLDPyFcjoTpWgEdf8t0hZtD1
/tzi6PVu9IN17i6yhzSR2IGUiun98k9DOC2QbPtg60WF9KVmycz2vgg8KJck9YgV
1nJ6qSKLii7tBlbHI9cKEqUAxEnaSyfoyKQjOmsx9MUQQ3O8oiarAlICOANo7Twq
mNecHjABcLs6eV4Ta0BLByas8RWjcWi0mBIe3BF/MzF3JyvL446UFOaHHynOjNdJ
rzUIaZtUGOvSUszNYOYm7qPGpmifDq3Tdph9wyNM8otI8IG7M8WI2HSZqcDi/urH
91433HAV2yS3G+LwXBX9mM3PpktNur+OChCX6p3Lv+9PPCxB5wl9OmuGusK+4f94
PBYDWOfoBOpBBsWNvED+3goFrU+CWtDMsXEKiaMg6TPpKWB+anqgMZR6JEYr3FuA
fo9Sa2sKm+dYTrNerUJVr5MW2FtiIVqAyTlsNqHB1z3EmfQQoYhlmtNax+p0qW6Y
GgUqMpeO5Nzvc5+8UBcSfmOp/cVgxKMaXP0rlRU=
KEYDATA
}

# Install another key (16BD9233), if it isn't already, for future use.
install_future_key() {
  find_apt_trusted
  (base64 -d > "$APT_TRUSTEDDIR/vivaldi-16BD9233.gpg") <<KEYDATA
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
PZ2s3lTwkFW64dyrrmIWzspj0qSATQPm130tpeA=
KEYDATA
}

uninstall_key() {
  find_apt_trusted
  rm -f "$APT_TRUSTEDDIR/vivaldi-74C35BC8.gpg" "$APT_TRUSTEDDIR/vivaldi-16BD9233.gpg"
}

# Set variables for the locations of the apt sources lists.
find_apt_sources() {
  eval $("$APT_CONFIG" shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
}

# Update the Google repository if it's not set correctly.
# Note: this doesn't necessarily enable the repository, it just makes sure the
# correct settings are available in the sources list.
# Returns:
# 0 - no update necessary
# 2 - error
update_bad_sources() {
  if [ ! "$REPOCONFIG" ]; then
    return 0
  fi

  find_apt_sources

  SOURCELIST="$APT_SOURCESDIR/vivaldi.list"
  # Don't do anything if the file isn't there, since that probably means the
  # user disabled it.
  if [ ! -r "$SOURCELIST" ]; then
    return 0
  fi

  # Basic check for active configurations (non-blank, non-comment lines).
  ACTIVECONFIGS=$(grep -v "^[[:space:]]*\(#.*\)\?$" "$SOURCELIST" 2>/dev/null)

  # Check if the correct repository configuration is in there.
  REPOMATCH=$(grep -E "^[[:space:]#]*\b$REPOCONFIGREGEX\b" "$SOURCELIST" \
    2>/dev/null)

  # Check if the correct repository is disabled.
  MATCH_DISABLED=$(echo "$REPOMATCH" | grep "^[[:space:]]*#" 2>/dev/null)

  # Now figure out if we need to fix things.
  BADCONFIG=1
  if [ "$REPOMATCH" ]; then
    # If it's there and active, that's ideal, so nothing to do.
    if [ ! "$MATCH_DISABLED" ]; then
      BADCONFIG=0
    else
      # If it's not active, but neither is anything else, that's fine too.
      if [ ! "$ACTIVECONFIGS" ]; then
        BADCONFIG=0
      fi
    fi
  fi

  if [ $BADCONFIG -eq 0 ]; then
    return 0
  fi

  # At this point, either the correct configuration is completely missing, or
  # the wrong configuration is active. In that case, just abandon the mess and
  # recreate the file with the correct configuration. If there were no active
  # configurations before, create the new configuration disabled.
  DISABLE=""
  if [ ! "$ACTIVECONFIGS" ]; then
    DISABLE="#"
  fi
  printf "$SOURCES_PREAMBLE" > "$SOURCELIST"
  printf "$DISABLE$REPOCONFIG\n" >> "$SOURCELIST"
  if [ $? -eq 0 ]; then
    return 0
  fi
  return 2
}

# Add the Google repository to the apt sources.
# Returns:
# 0 - sources list was created
# 2 - error
create_sources_lists() {
  if [ ! "$REPOCONFIG" ]; then
    return 0
  fi

  find_apt_sources

  SOURCELIST="$APT_SOURCESDIR/vivaldi.list"
  if [ -d "$APT_SOURCESDIR" ]; then
    printf "$SOURCES_PREAMBLE" > "$SOURCELIST"
    printf "$REPOCONFIG\n" >> "$SOURCELIST"
    if [ $? -eq 0 ]; then
      return 0
    fi
  fi
  return 2
}

# Remove our custom sources list file.
# Returns:
# 0 - successfully removed, or not configured
# !0 - failed to remove
clean_sources_lists() {
  if [ ! "$REPOCONFIG" ]; then
    return 0
  fi

  find_apt_sources

  rm -f "$APT_SOURCESDIR/vivaldi.list"
}

# Detect if the repo config was disabled by distro upgrade and enable if
# necessary.
handle_distro_upgrade() {
  if [ ! "$REPOCONFIG" ]; then
    return 0
  fi

  find_apt_sources
  SOURCELIST="$APT_SOURCESDIR/vivaldi.list"
  if [ -r "$SOURCELIST" ]; then
    REPOLINE=$(grep -E "^[[:space:]]*#[[:space:]]*$REPOCONFIGREGEX[[:space:]]*# disabled on upgrade to .*" "$SOURCELIST")
    if [ $? -eq 0 ]; then
      sed -i -e "s,^[[:space:]]*#[[:space:]]*\(.*\)[[:space:]]*# disabled on upgrade to .*,\1," \
        "$SOURCELIST"
      LOGGER=$(command -v logger 2> /dev/null)
      if [ "$LOGGER" ]; then
        "$LOGGER" -t "$0" "Reverted repository modification: $REPOLINE."
      fi
    fi
  fi
}

DEFAULT_ARCH="amd64"

get_lib_dir() {
  if [ "$DEFAULT_ARCH" = "i386" ]; then
    LIBDIR=lib/i386-linux-gnu
  elif [ "$DEFAULT_ARCH" = "amd64" ]; then
    LIBDIR=lib/x86_64-linux-gnu
  elif [ "$DEFAULT_ARCH" = "armhf" ]; then
    LIBDIR=lib/arm-linux-gnueabihf
  elif [ "$DEFAULT_ARCH" = "arm64" ]; then
    LIBDIR=lib/aarch64-linux-gnu
  elif [ "$DEFAULT_ARCH" = "mipsel" ]; then
    LIBDIR=lib/mipsel-linux-gnu
  elif [ "$DEFAULT_ARCH" = "mips64el" ]; then
    LIBDIR=lib/mips64el-linux-gnuabi64
  else
    echo Unknown CPU Architecture: "$DEFAULT_ARCH"
    exit 1
  fi
}

## MAIN ##
if [ -r "$DEFAULTS_FILE" ]; then
  . "$DEFAULTS_FILE"
fi

install_key
install_future_key

if [ "$repo_add_once" = "true" ]; then
  create_sources_lists
  RES=$?
  # Sources creation succeeded, so stop trying.
  if [ $RES -ne 2 ]; then
    sed -i -e 's/[[:space:]]*repo_add_once=.*/repo_add_once="false"/' "$DEFAULTS_FILE"
  fi
else
  update_bad_sources
fi

if [ "$repo_reenable_on_distupgrade" = "true" ]; then
  handle_distro_upgrade
fi
