Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33a7e4c8 authored by Nishith  Khanna's avatar Nishith Khanna
Browse files

Merge branch '3916-main-staging' into 'main'

feat: add support for switching to staging server via adb

See merge request !188
parents 0fff7547 82bc6544
Loading
Loading
Loading
Loading
Loading
+11 −46
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@ before_script:
  - echo GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID >> local.properties
  - echo GOOGLE_REDIRECT_URI=$GOOGLE_REDIRECT_URI >> local.properties
  - echo YAHOO_CLIENT_ID=$YAHOO_CLIENT_ID >> local.properties
  - echo MURENA_BASE_URL_PRODUCTION=$MURENA_BASE_URL_PRODUCTION >> local.properties
  - echo MURENA_DISCOVERY_END_POINT_PRODUCTION=$MURENA_DISCOVERY_END_POINT_PRODUCTION >> local.properties
  - echo MURENA_BASE_URL_STAGING=$MURENA_BASE_URL_STAGING >> local.properties
  - echo MURENA_DISCOVERY_END_POINT_STAGING=$MURENA_DISCOVERY_END_POINT_STAGING >> local.properties
  - export GRADLE_USER_HOME=$(pwd)/.gradle
  - chmod +x ./gradlew

@@ -29,30 +33,9 @@ cache:
  paths:
    - .gradle/

build-prod:
build:
  stage: build
  script:
    - echo MURENA_BASE_URL=$MURENA_BASE_URL >> local.properties
    - echo MURENA_DISCOVERY_END_POINT=$MURENA_DISCOVERY_END_POINT >> local.properties
    - ./gradlew build -x test
    - cd app/build/outputs/apk/ose/
    - |
      if [[ ! -d "release" ]]; then
        echo "$APK_PATH does not exist."
        exit 1
      fi
      cd "release"
      unsigned_build=$(ls *.apk | grep "release")
      mv $unsigned_build $UNSIGNED_APK
  artifacts:
    paths:
      - app/build/outputs/apk/ose/

build-staging:
  stage: build
  script:
    - echo MURENA_BASE_URL=$MURENA_BASE_URL_STAGING >> local.properties
    - echo MURENA_DISCOVERY_END_POINT=$MURENA_DISCOVERY_END_POINT_STAGING >> local.properties
    - ./gradlew build -x test
    - cd app/build/outputs/apk/ose/
    - |
@@ -78,27 +61,11 @@ init_submodules:
    paths:
      - systemAppsUpdateInfo/scripts/

generate-prod-apks:
generate-apks:
  stage: gitlab_release
  needs:
    - job: init_submodules
    - job: build-prod
  script:
    - |
      ./systemAppsUpdateInfo/scripts/generate-apks.sh \
      "$APK_PATH" "$UNSIGNED_APK" "$COMMUNITY_APK" "$OFFICIAL_APK" "$TEST_APK"
  artifacts:
    paths:
      - $APK_PATH/$UNSIGNED_APK
      - $APK_PATH/$COMMUNITY_APK
      - $APK_PATH/$OFFICIAL_APK
      - $APK_PATH/$TEST_APK

generate-staging-apks:
  stage: gitlab_release
  needs:
    - job: init_submodules
    - job: build-staging
    - job: build
  script:
    - |
      ./systemAppsUpdateInfo/scripts/generate-apks.sh \
@@ -114,7 +81,7 @@ create-json-files:
  stage: gitlab_release
  needs:
    - job: init_submodules
    - job: generate-prod-apks
    - job: generate-apks
  rules:
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
      when: on_success
@@ -133,7 +100,7 @@ create-test-release:
  needs:
    - job: init_submodules
    - job: create-json-files
    - job: generate-prod-apks
    - job: generate-apks
  rules:
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
      when: manual
@@ -150,7 +117,7 @@ create-release:
  needs:
    - init_submodules
    - create-json-files
    - generate-prod-apks
    - generate-apks
  rules:
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
      when: manual
@@ -168,7 +135,7 @@ create-release:
    CI_PROJECT_SSH_URL: git@gitlab.e.foundation:$CI_PROJECT_PATH
    GIT_STRATEGY: none
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - "command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )"
    - eval $(ssh-agent -s)
    - echo "${SSH_E_ROBOT_PRIVATE_KEY}" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
@@ -211,5 +178,3 @@ update-default-branch:
    UPSTREAM_DEFAULT_BRANCH: release-ose
    UPSTREAM_URL: https://github.com/bitfireAT/davx5-ose.git
    TEMP_LATEST_TAG_BRANCH: latest_upstream_tag_branch

+4 −2
Original line number Diff line number Diff line
@@ -142,8 +142,10 @@ android {
        buildConfigField "String", "MURENA_CLIENT_ID", "\"${retrieveKey("MURENA_CLIENT_ID")}\""
        buildConfigField "String", "MURENA_REDIRECT_URI", "\"${retrieveKey("MURENA_REDIRECT_URI")}\""
        buildConfigField "String", "MURENA_LOGOUT_REDIRECT_URI", "\"${retrieveKey("MURENA_LOGOUT_REDIRECT_URI")}\""
        buildConfigField "String", "MURENA_BASE_URL", "\"${retrieveKey("MURENA_BASE_URL")}\""
        buildConfigField "String", "MURENA_DISCOVERY_END_POINT", "\"${retrieveKey("MURENA_DISCOVERY_END_POINT")}\""
        buildConfigField "String", "MURENA_BASE_URL_STAGING", "\"${retrieveKey("MURENA_BASE_URL_STAGING")}\""
        buildConfigField "String", "MURENA_BASE_URL_PRODUCTION", "\"${retrieveKey("MURENA_BASE_URL_PRODUCTION")}\""
        buildConfigField "String", "MURENA_DISCOVERY_END_POINT_STAGING", "\"${retrieveKey("MURENA_DISCOVERY_END_POINT_STAGING")}\""
        buildConfigField "String", "MURENA_DISCOVERY_END_POINT_PRODUCTION", "\"${retrieveKey("MURENA_DISCOVERY_END_POINT_PRODUCTION")}\""

        buildConfigField "String", "GOOGLE_CLIENT_ID", "\"${retrieveKey("GOOGLE_CLIENT_ID")}\""
        buildConfigField "String", "GOOGLE_REDIRECT_URI", "\"${retrieveKey("GOOGLE_REDIRECT_URI")}\""
+23 −5
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import android.content.Context
import android.net.Uri
import at.bitfire.davdroid.BuildConfig
import at.bitfire.davdroid.R
import at.bitfire.davdroid.util.MurenaServerConfig
import net.openid.appauth.AuthorizationServiceConfiguration
import net.openid.appauth.AuthorizationServiceConfiguration.RetrieveConfigurationCallback

@@ -38,7 +39,7 @@ enum class IdentityProvider(
    baseUrl: String?
) {
    MURENA(
        discoveryEndpoint = BuildConfig.MURENA_DISCOVERY_END_POINT,
        discoveryEndpoint = BuildConfig.MURENA_DISCOVERY_END_POINT_PRODUCTION,
        authEndpoint = null,
        tokenEndpoint = null,
        clientId = BuildConfig.MURENA_CLIENT_ID,
@@ -47,7 +48,7 @@ enum class IdentityProvider(
        logoutRedirectUri = BuildConfig.MURENA_LOGOUT_REDIRECT_URI + ":/redirect",
        scope = "openid profile email offline_access",
        userInfoEndpoint = null,
        baseUrl = BuildConfig.MURENA_BASE_URL,
        baseUrl = BuildConfig.MURENA_BASE_URL_PRODUCTION,
    ),
    GOOGLE(
        discoveryEndpoint = "https://accounts.google.com/.well-known/openid-configuration",
@@ -116,9 +117,26 @@ enum class IdentityProvider(
        this.baseUrl = baseUrl
    }

    fun retrieveConfig(callback: RetrieveConfigurationCallback) {
        if (mDiscoveryEndpoint != null) {
            AuthorizationServiceConfiguration.fetchFromUrl(mDiscoveryEndpoint, callback)
    fun getBaseUrl(context: Context): String? {
        return if (this == MURENA) {
            MurenaServerConfig.getBaseUrl(context)
        } else {
            baseUrl
        }
    }

    private fun getDiscoveryEndpoint(context: Context): Uri? {
        return if (this == MURENA) {
            retrieveUri(MurenaServerConfig.getDiscoveryUrl(context))
        } else {
            mDiscoveryEndpoint
        }
    }

    fun retrieveConfig(context: Context, callback: RetrieveConfigurationCallback) {
        val discoveryEndpoint = getDiscoveryEndpoint(context)
        if (discoveryEndpoint != null) {
            AuthorizationServiceConfiguration.fetchFromUrl(discoveryEndpoint, callback)
        } else {
            val config = AuthorizationServiceConfiguration(mAuthEndpoint!!, mTokenEndpoint!!, null)
            callback.onFetchConfigurationCompleted(config, null)
+5 −2
Original line number Diff line number Diff line
@@ -173,11 +173,14 @@ object AccountUtils {
            accountManager.getUserData(account, Constants.KEY_OC_BASE_URL) ?: return false

        val baseUrl = extractBaseUrl(urlData)
        val murenaBaseUrl = extractBaseUrl(BuildConfig.MURENA_BASE_URL)
        val murenaBaseUrls = setOf(
            extractBaseUrl(BuildConfig.MURENA_BASE_URL_PRODUCTION),
            extractBaseUrl(BuildConfig.MURENA_BASE_URL_STAGING),
        )

        // User can have their own Murena account set up with custom Nextcloud instance,
        // so a check for base URL is necessary.
        val isMurenaCloud = (baseUrl == murenaBaseUrl)
        val isMurenaCloud = baseUrl in murenaBaseUrls
        val isMurenaAccountType = (account.type == context.getString(R.string.eelo_account_type))

        return isMurenaCloud && isMurenaAccountType
+5 −1
Original line number Diff line number Diff line
@@ -64,6 +64,10 @@ class MurenaOpenIdAuthFragment : OpenIdAuthenticationBaseFragment(IdentityProvid
            return
        }

        proceedNext(userName, "${IdentityProvider.MURENA.baseUrl}$userName")
        val baseUrl = IdentityProvider.MURENA.getBaseUrl(requireContext()) ?: run {
            handleLoginFailedToast()
            return
        }
        proceedNext(userName, "$baseUrl$userName")
    }
}
Loading