#!/bin/sh
#
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# 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 (C27AA466), 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-C27AA466.gpg") <<KEYDATA
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
ZaKxbt1C7BKkfi9+xbnrgvtheHeT13V9rEVLh90=
KEYDATA
}

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

uninstall_key() {
  find_apt_trusted
  rm -f "$APT_TRUSTEDDIR/vivaldi-C27AA466.gpg" "$APT_TRUSTEDDIR/vivaldi-4218647E.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 ##
DEFAULTS_FILE="/etc/default/vivaldi"
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
