mirror of
https://github.com/git-touch/git-touch
synced 2024-12-15 09:56:15 +01:00
feat(gitee): add token login step
This commit is contained in:
parent
d37a5c1981
commit
f480dc048e
@ -3,6 +3,7 @@ import 'dart:convert';
|
||||
import 'dart:async';
|
||||
import 'package:git_touch/models/bitbucket.dart';
|
||||
import 'package:git_touch/models/gitea.dart';
|
||||
import 'package:git_touch/models/gitee.dart';
|
||||
import 'package:git_touch/utils/request_serilizer.dart';
|
||||
import 'package:github/github.dart';
|
||||
import 'package:gql_http_link/gql_http_link.dart';
|
||||
@ -26,6 +27,7 @@ class PlatformType {
|
||||
static const gitlab = 'gitlab';
|
||||
static const bitbucket = 'bitbucket';
|
||||
static const gitea = 'gitea';
|
||||
static const gitee = 'gitee';
|
||||
}
|
||||
|
||||
class DataWithPage<T> {
|
||||
@ -314,6 +316,32 @@ class AuthModel with ChangeNotifier {
|
||||
);
|
||||
}
|
||||
|
||||
Future loginToGitee(String token) async {
|
||||
token = token.trim();
|
||||
try {
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
final res = await http.get('https://gitee.com/api/v5/user',
|
||||
headers: {'Authorization': 'token $token'});
|
||||
final info = json.decode(res.body);
|
||||
if (info['message'] != null) {
|
||||
throw info['message'];
|
||||
}
|
||||
final user = GiteeUser.fromJson(info);
|
||||
|
||||
await _addAccount(Account(
|
||||
platform: PlatformType.gitea,
|
||||
domain: 'https://gitee.com',
|
||||
token: token,
|
||||
login: user.login,
|
||||
avatarUrl: user.avatarUrl,
|
||||
));
|
||||
} finally {
|
||||
loading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> init() async {
|
||||
// Listen scheme
|
||||
_sub = getUriLinksStream().listen(_onSchemeDetected, onError: (err) {
|
||||
|
12
lib/models/gitee.dart
Normal file
12
lib/models/gitee.dart
Normal file
@ -0,0 +1,12 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'gitee.g.dart';
|
||||
|
||||
@JsonSerializable(fieldRename: FieldRename.snake)
|
||||
class GiteeUser {
|
||||
String login;
|
||||
String avatarUrl;
|
||||
GiteeUser();
|
||||
factory GiteeUser.fromJson(Map<String, dynamic> json) =>
|
||||
_$GiteeUserFromJson(json);
|
||||
}
|
18
lib/models/gitee.g.dart
Normal file
18
lib/models/gitee.g.dart
Normal file
@ -0,0 +1,18 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'gitee.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
GiteeUser _$GiteeUserFromJson(Map<String, dynamic> json) {
|
||||
return GiteeUser()
|
||||
..login = json['login'] as String
|
||||
..avatarUrl = json['avatar_url'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GiteeUserToJson(GiteeUser instance) => <String, dynamic>{
|
||||
'login': instance.login,
|
||||
'avatar_url': instance.avatarUrl,
|
||||
};
|
@ -293,6 +293,24 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
}
|
||||
},
|
||||
),
|
||||
_buildAddItem(
|
||||
text: 'Gitee Account',
|
||||
brand: Octicons.git_branch, // TODO: brand icon
|
||||
onTap: () async {
|
||||
final result = await theme.showConfirm(
|
||||
context,
|
||||
_buildPopup(context),
|
||||
);
|
||||
if (result == true) {
|
||||
try {
|
||||
await auth.loginToGitee(_tokenController.text);
|
||||
_tokenController.clear();
|
||||
} catch (err) {
|
||||
showError(err);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
Container(
|
||||
padding: CommonStyle.padding,
|
||||
child: Text(
|
||||
|
Loading…
Reference in New Issue
Block a user