#!/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=arm64] https://repo.vivaldi.com/stable/deb/ stable main"
REPOCONFIGREGEX="deb (\[arch=[^]]*\barm64\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 (4218647E), 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-4218647E.gpg") <<KEYDATA
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
hHYGc8UN2gHhjxEbP/eulkMGnnLC7ULdO2FZXlA=
KEYDATA
}

# Install another key (33EAAB8E), if it isn't already, for future use.
install_future_key() {
  find_apt_trusted
  (base64 -d > "$APT_TRUSTEDDIR/vivaldi-33EAAB8E.gpg") <<KEYDATA
mQINBGO9ZysBEACeLmXsTfEk6Msqskhkr+fU2uFTinefc6o8p1T9uRVkBiIM641/
n76LtmGuGQkIsDi+a6XkdNE08hn8IHru3Ir5m2/oku8lP99U0iHjKpF6D/37xxJa
5w9NyOQwusd3p4mPY+QB284ngMPPKIO0dudCfnRAPNzZejSwJ/rqoakMpBSPLn6j
U4la52aCfa25dtz2xpE6Q7mAvmi/zX/33ZdY71fJdoALXduQCLOMHj4i7J3BR8uQ
cC9KdJCm2DfaZAL2hz7+U8PeNkd7JOaKV+0nNYUhTN9zfE52vZq3SYWbCmBxlW7h
N+djIVtn85z/9xZX9fhDA8FKxIqL7SThPGZa/M4K7k+hlDxlZ3qhUCOfSN8L0zbk
/3iFb8K7h5YJbg5W5Cmm6bGQHPS9Urb2pAPaXn65fZYTEyGq0KN2aely4bq+HisK
a0N+aqrFeslCa2fJHom2BNle+Yy4Ys18xZ+I8Fji7HGQ6y8PcivaOw29R7Cspn/N
JEVZeR/jPXXylB0jf2zN1tOj7PKKvW3n6I6i3zd69OepkV/hBD9xLUqb0M+QSRGQ
3CMPCCvJA3A5D2UfPY+DSZNMkYG+p97mNEVqgOgBHZzz4wKTK92zF2GcvcdEsqtd
ukcQ9w/gLVU3Vv5KDUAB23wIqm1Jdo3JXRqZge5f2/EV41rVI7vRx63GdQARAQAB
tDVWaXZhbGRpIFBhY2thZ2UgQ29tcG9zZXIgS0VZMDkgPHBhY2thZ2VyQHZpdmFs
ZGkuY29tPokCVAQTAQoAPhYhBDNgGPJj+gAAZc7XxhJPFJgz6quOBQJjvWcrAhsD
BQkEBFIABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEBJPFJgz6quOQJsP/Aqb
nLZAO9C3Hmljz0O5B+Ms2FXMVM/KF9DwIdV+AIiwf/WloPRbomYKapTRYIhPsQOU
Ol2C1IvSp3Em2fQM6dtMPzDDs7NkY0wGOVBHWVHeaXinxcPaZUY4Jd+QKsI0q3sd
NJcVMuX60/+cmJ2nzNZNfdxAmcXl2g9/QJpBXyrgTHS4C2EtvkhdEFHvUzg28ne8
5WFsNDVGJqiNpgS+GFbL9lxxHBe5KDZBnJXzURnvS63CnbbZiP5mHk0Xp7849yF1
3WYZYI5L6aZjpAxExpz6hyKz8TLLcCdB+lV98PYlJBSR556dmmR27xCiYjgIYdY2
HhjdwrJN9ARz5RNdFUsne0JXIoFwR8UI6rBPh7dLhQGg9FU5K4ACrcItksnlgc7S
9a9qTBZUhY9pqAS2hn1xKYbNo7xTV2z+afYsvkrv68SuEEOngMLDGNA/i/zUI541
XuJ1htMVDRTEmbApJapEfDr0Y0YoiCfVaTor5YxJw6eO6SC4+TCfcKNsmSwHkj+i
rVcliWNCs0MoUUhthRbKwdPndQgvGioCHFz+KfHOuPK/RAoMrriKxAw1pBTjG8Y0
zWzMKaMTBH7AkHzkT0qXjZhEFEaSFLFJa1OSKQNoodqxOGCDI/JEPvz8kXIAKcGV
1yPctq/EQJJGP3SyqnQON8sYaog3I4xuwLCpO+UduQINBGO9ZysBEACYB6sAsXwU
dBUWjQgWBvx5Sb3K/yrk9+Wj4ahdHOhFFtH//xI1170Jeac3iFONUJJ69dBwOY8I
rPtpsl8pz+/Sr0+4cqyR5whkxuRAqqMKI47F+Voi/I931T4pV8fNcz5Y5rZaEkfx
fUFl6mkGdKzVBdlxkbdcTSFr5gIb0UYQvRc9TzsNO9OFly6sR9Iz/T4h5S7/k1qa
gpiVJeT6il2QiY2OBhSUfmlvBItadCD4ZrFvFeNREyDQ7xJ/mU46R39AGTtqt1Qm
uSdCO1+z6JSToD9x6xv/eF5uLbvztogj9yEw3t8AubRT253dMLLfHm8lnYdC8GwF
el9L0+s5ex2Dj4xyxZosV3dwQXk/oaHefW9BjcQLxGkOH0gBt+ZQ+mHUlI4kgOXQ
guHKuCrBycT5DyrrbQbPFp3kQXbLzKNym7eWHnbvZx6uIQSu70QvBo9zPRiurC7A
4ofKcpvJdRhbojmc9ekprM2hDZEcsyiT0t/6W8+zfxyGBLK4pLMkuhGB8VQV+U7W
vIxkRQLqpzo0nzEEOkxxBSI+O6hLDeZVOLBhuLW49K1E2zfDp6PWoDMEccT684+Z
Pvz/ytVr3jBYHkaMH4Djzxl/BuSMA+njljpzjPvdpjSsCQ753IyqudXQ1aVscfrr
I31OB1JVAjCyziBpGVyNlOjVpYukWLoReQARAQABiQI8BBgBCgAmFiEEM2AY8mP6
AABlztfGEk8UmDPqq44FAmO9ZysCGwwFCQQEUgAACgkQEk8UmDPqq44Jkg/9F2ru
pFszfK9Qes8lMZ/7bqMZam45cIYURQY+6BJ8yqvj8u3we/uiGb0dwF+zOt4TkJU+
U7bqNEyB4pZsOoAQlYA/YPa4y0jTTJKFdjnKIXo/LaqKz8Mc7ONpOZHGZ25MGL+/
vxMYX2Pi0dNGsyqFBXRwuSs1Mx0sJunFf/qyIfwC3CCf6TWlAfCMNlNhoQ4idNmG
Q4hZq0BZFROjNKKuOm+Dm6qYo6VDjP/C+ttgo+N+kydq6Ieytbecys+aQBSFstuJ
ilhj9sRVmFDEze6Q4D2Q5dnuuT3ZET0U1aQ4KOcCUnPA5xrEb/iB/W3n76A/IS+4
2XHIwU8KgpQGMOegE1L9KSX9/ps1BEu1C9z10MmUZBchKydoSJBbTZKh+7+aixsK
7ruWpgU6qLxx+dqTZ7CF55m6JxAwrbbamSFfW91NA4yoNAMtkDx5KP9/fLoVnZum
B6LrSiXbD+mMJ/IqGpFSSH95EjLJO0c8U49MbQVgB5aHgt50k9sq8HtoJ7ewpEmT
sz4xGk7qg09h2SBhBWpiol7i3S96n8BdZOzpjBM0ZBu41foC9r2WFxJhs/vEnlqa
WFyoci3Fngd2+eymsme2AoQi0vHVYcLcL/0HjbU+f/5Cv0YFgj0mvoqFB+IG/ALH
KLjnVlvK3NkBqWBEmDSNS2yMqMM3KjvpwATqCUA=
KEYDATA
}

uninstall_key() {
  find_apt_trusted
  rm -f "$APT_TRUSTEDDIR/vivaldi-4218647E.gpg" "$APT_TRUSTEDDIR/vivaldi-33EAAB8E.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="arm64"

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
