Loading play-services-base/core/src/main/java/org/microg/gms/common/HttpFormClient.java +11 −2 Original line number Diff line number Diff line Loading @@ -81,8 +81,9 @@ public class HttpFormClient { } Log.d(TAG, "-- Request --\n" + content); String replace = content.toString().trim().replace("\n", ""); OutputStream os = connection.getOutputStream(); os.write(content.toString().getBytes()); os.write(replace.trim().getBytes()); os.close(); if (connection.getResponseCode() != 200) { Loading Loading @@ -117,8 +118,12 @@ public class HttpFormClient { private static void appendParam(StringBuilder content, String key, String value) { if (content.length() > 0) content.append("&"); if (key.equals("token_request_options")) { content.append(Uri.encode(key)).append("=").append(value); } else { content.append(Uri.encode(key)).append("=").append(Uri.encode(String.valueOf(value))); } } private static <T> T parseResponse(Class<T> tClass, HttpURLConnection connection, String result) throws IOException { Map<String, List<String>> headerFields = connection.getHeaderFields(); Loading @@ -138,6 +143,7 @@ public class HttpFormClient { for (Field field : tClass.getDeclaredFields()) { if (field.isAnnotationPresent(ResponseField.class) && key.equals(field.getAnnotation(ResponseField.class).value())) { field.setAccessible(true); matched = true; if (field.getType().equals(String.class)) { field.set(response, value); Loading @@ -163,6 +169,7 @@ public class HttpFormClient { if (strings == null || strings.size() != 1) continue; String value = strings.get(0); try { field.setAccessible(true); if (field.getType().equals(String.class)) { field.set(response, value); } else if (field.getType().equals(boolean.class)) { Loading @@ -178,6 +185,7 @@ public class HttpFormClient { } if (field.isAnnotationPresent(ResponseStatusCode.class) && field.getType() == int.class) { try { field.setAccessible(true); field.setInt(response, connection.getResponseCode()); } catch (IllegalAccessException e) { Log.w(TAG, e); Loading @@ -185,6 +193,7 @@ public class HttpFormClient { } if (field.isAnnotationPresent(ResponseStatusText.class) && field.getType() == String.class) { try { field.setAccessible(true); field.set(response, connection.getResponseMessage()); } catch (IllegalAccessException e) { Log.w(TAG, e); Loading play-services-basement/src/main/java/com/google/android/gms/common/Scopes.java +4 −0 Original line number Diff line number Diff line Loading @@ -94,4 +94,8 @@ public class Scopes { public static final String USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email"; @Hide public static final String USERINFO_PROFILE = "https://www.googleapis.com/auth/userinfo.profile"; @Hide public static final String USER_BIRTHDAY_READ = "https://www.googleapis.com/auth/user.birthday.read"; @Hide public static final String GMAIL_READONLY = "https://www.googleapis.com/auth/gmail.readonly"; } play-services-core-proto/src/main/proto/auth.proto +42 −1 Original line number Diff line number Diff line Loading @@ -15,3 +15,44 @@ message ConsentData { } repeated ScopeDetails scopes = 2; } message RequestOptions { // optional bool field_1 = 1; // optional string field_2 = 2; // optional string field_3 = 3; // optional int32 field_4 = 4; // optional int32 field_5 = 5; optional int32 remote = 7; optional int32 version = 10; optional string sessionId = 11; // optional bool field_12 = 12; } message ConsentUrlResponse { optional int32 resultCode = 2; optional string consentUrl = 3; optional Cookie cookie = 4; } message ConsentCookiesResponse { optional ConsentCookies consentCookies = 1; } message ConsentCookies { optional int32 resultCode = 1; repeated Cookie cookies = 2; } message Cookie { optional string cookieName = 1; optional string cookieValue = 2; optional string domain = 3; optional string path = 4; optional int64 sameSite = 5; optional int64 secure = 6; optional int64 httpOnly = 7; optional int64 maxAge = 8; optional int64 version = 9; optional string discard = 10; optional string comment = 12; } play-services-core/src/main/AndroidManifest.xml +6 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,12 @@ </intent-filter> </service> <activity android:name="org.microg.gms.auth.consent.ConsentSignInActivity" android:process=":ui" android:exported="false" android:theme="@style/Theme.AppCompat.DayNight.Dialog"/> <!-- Games --> <activity Loading play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java +13 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ import org.microg.gms.common.PackageUtils; import org.microg.gms.settings.SettingsContract; import java.io.IOException; import java.util.HashMap; import java.util.Map; import static android.content.pm.ApplicationInfo.FLAG_SYSTEM; import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; Loading @@ -30,7 +32,7 @@ public class AuthManager { public static final String PERMISSION_TREE_BASE = "com.google.android.googleapps.permission.GOOGLE_AUTH."; public static final String PREF_AUTH_VISIBLE = SettingsContract.Auth.VISIBLE; public static final int ONE_HOUR_IN_SECONDS = 60 * 60; public Map<Object, Object> dynamicFields = new HashMap<>(); private final Context context; private final String accountName; private final String packageName; Loading @@ -49,6 +51,7 @@ public class AuthManager { private String tokenRequestOptions; public String includeEmail; public String includeProfile; public boolean isGmsApp; public AuthManager(Context context, String accountName, String packageName, String service) { this.context = context; Loading Loading @@ -160,6 +163,10 @@ public class AuthManager { this.tokenRequestOptions = tokenRequestOptions; } public void putDynamicFiled(Object key, Object value) { this.dynamicFields.put(key, value); } public boolean accountExists() { for (Account refAccount : getAccountManager().getAccountsByType(accountType)) { if (refAccount.name.equalsIgnoreCase(accountName)) return true; Loading Loading @@ -273,7 +280,11 @@ public class AuthManager { .itCaveatTypes(itCaveatTypes) .tokenRequestOptions(tokenRequestOptions) .systemPartition(isSystemApp()) .hasPermission(isPermitted()); .hasPermission(isPermitted()) .putDynamicFiledMap(dynamicFields); if (isGmsApp) { request.appIsGms(); } if (legacy) { request.callerIsGms().calledFromAccountManager(); } else { Loading Loading
play-services-base/core/src/main/java/org/microg/gms/common/HttpFormClient.java +11 −2 Original line number Diff line number Diff line Loading @@ -81,8 +81,9 @@ public class HttpFormClient { } Log.d(TAG, "-- Request --\n" + content); String replace = content.toString().trim().replace("\n", ""); OutputStream os = connection.getOutputStream(); os.write(content.toString().getBytes()); os.write(replace.trim().getBytes()); os.close(); if (connection.getResponseCode() != 200) { Loading Loading @@ -117,8 +118,12 @@ public class HttpFormClient { private static void appendParam(StringBuilder content, String key, String value) { if (content.length() > 0) content.append("&"); if (key.equals("token_request_options")) { content.append(Uri.encode(key)).append("=").append(value); } else { content.append(Uri.encode(key)).append("=").append(Uri.encode(String.valueOf(value))); } } private static <T> T parseResponse(Class<T> tClass, HttpURLConnection connection, String result) throws IOException { Map<String, List<String>> headerFields = connection.getHeaderFields(); Loading @@ -138,6 +143,7 @@ public class HttpFormClient { for (Field field : tClass.getDeclaredFields()) { if (field.isAnnotationPresent(ResponseField.class) && key.equals(field.getAnnotation(ResponseField.class).value())) { field.setAccessible(true); matched = true; if (field.getType().equals(String.class)) { field.set(response, value); Loading @@ -163,6 +169,7 @@ public class HttpFormClient { if (strings == null || strings.size() != 1) continue; String value = strings.get(0); try { field.setAccessible(true); if (field.getType().equals(String.class)) { field.set(response, value); } else if (field.getType().equals(boolean.class)) { Loading @@ -178,6 +185,7 @@ public class HttpFormClient { } if (field.isAnnotationPresent(ResponseStatusCode.class) && field.getType() == int.class) { try { field.setAccessible(true); field.setInt(response, connection.getResponseCode()); } catch (IllegalAccessException e) { Log.w(TAG, e); Loading @@ -185,6 +193,7 @@ public class HttpFormClient { } if (field.isAnnotationPresent(ResponseStatusText.class) && field.getType() == String.class) { try { field.setAccessible(true); field.set(response, connection.getResponseMessage()); } catch (IllegalAccessException e) { Log.w(TAG, e); Loading
play-services-basement/src/main/java/com/google/android/gms/common/Scopes.java +4 −0 Original line number Diff line number Diff line Loading @@ -94,4 +94,8 @@ public class Scopes { public static final String USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email"; @Hide public static final String USERINFO_PROFILE = "https://www.googleapis.com/auth/userinfo.profile"; @Hide public static final String USER_BIRTHDAY_READ = "https://www.googleapis.com/auth/user.birthday.read"; @Hide public static final String GMAIL_READONLY = "https://www.googleapis.com/auth/gmail.readonly"; }
play-services-core-proto/src/main/proto/auth.proto +42 −1 Original line number Diff line number Diff line Loading @@ -15,3 +15,44 @@ message ConsentData { } repeated ScopeDetails scopes = 2; } message RequestOptions { // optional bool field_1 = 1; // optional string field_2 = 2; // optional string field_3 = 3; // optional int32 field_4 = 4; // optional int32 field_5 = 5; optional int32 remote = 7; optional int32 version = 10; optional string sessionId = 11; // optional bool field_12 = 12; } message ConsentUrlResponse { optional int32 resultCode = 2; optional string consentUrl = 3; optional Cookie cookie = 4; } message ConsentCookiesResponse { optional ConsentCookies consentCookies = 1; } message ConsentCookies { optional int32 resultCode = 1; repeated Cookie cookies = 2; } message Cookie { optional string cookieName = 1; optional string cookieValue = 2; optional string domain = 3; optional string path = 4; optional int64 sameSite = 5; optional int64 secure = 6; optional int64 httpOnly = 7; optional int64 maxAge = 8; optional int64 version = 9; optional string discard = 10; optional string comment = 12; }
play-services-core/src/main/AndroidManifest.xml +6 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,12 @@ </intent-filter> </service> <activity android:name="org.microg.gms.auth.consent.ConsentSignInActivity" android:process=":ui" android:exported="false" android:theme="@style/Theme.AppCompat.DayNight.Dialog"/> <!-- Games --> <activity Loading
play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java +13 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ import org.microg.gms.common.PackageUtils; import org.microg.gms.settings.SettingsContract; import java.io.IOException; import java.util.HashMap; import java.util.Map; import static android.content.pm.ApplicationInfo.FLAG_SYSTEM; import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; Loading @@ -30,7 +32,7 @@ public class AuthManager { public static final String PERMISSION_TREE_BASE = "com.google.android.googleapps.permission.GOOGLE_AUTH."; public static final String PREF_AUTH_VISIBLE = SettingsContract.Auth.VISIBLE; public static final int ONE_HOUR_IN_SECONDS = 60 * 60; public Map<Object, Object> dynamicFields = new HashMap<>(); private final Context context; private final String accountName; private final String packageName; Loading @@ -49,6 +51,7 @@ public class AuthManager { private String tokenRequestOptions; public String includeEmail; public String includeProfile; public boolean isGmsApp; public AuthManager(Context context, String accountName, String packageName, String service) { this.context = context; Loading Loading @@ -160,6 +163,10 @@ public class AuthManager { this.tokenRequestOptions = tokenRequestOptions; } public void putDynamicFiled(Object key, Object value) { this.dynamicFields.put(key, value); } public boolean accountExists() { for (Account refAccount : getAccountManager().getAccountsByType(accountType)) { if (refAccount.name.equalsIgnoreCase(accountName)) return true; Loading Loading @@ -273,7 +280,11 @@ public class AuthManager { .itCaveatTypes(itCaveatTypes) .tokenRequestOptions(tokenRequestOptions) .systemPartition(isSystemApp()) .hasPermission(isPermitted()); .hasPermission(isPermitted()) .putDynamicFiledMap(dynamicFields); if (isGmsApp) { request.appIsGms(); } if (legacy) { request.callerIsGms().calledFromAccountManager(); } else { Loading