common oidc

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow
2023-07-20 08:05:38 +08:00
parent 6111042907
commit dab956fe85
10 changed files with 51 additions and 30 deletions

View File

@@ -13,13 +13,13 @@ import '../../common.dart';
import './dialog.dart';
class _IconOP extends StatelessWidget {
final String icon;
final double iconWidth;
final String op;
final String? icon;
final EdgeInsets margin;
const _IconOP(
{Key? key,
required this.op,
required this.icon,
required this.iconWidth,
this.margin = const EdgeInsets.symmetric(horizontal: 4.0)})
: super(key: key);
@@ -27,10 +27,15 @@ class _IconOP extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
margin: margin,
child: SvgPicture.asset(
'assets/$icon.svg',
width: iconWidth,
),
child: icon == null
? SvgPicture.asset(
'assets/auth-${op.toLowerCase()}.svg',
width: 20,
)
: SvgPicture.string(
icon!,
width: 20,
),
);
}
}
@@ -38,7 +43,7 @@ class _IconOP extends StatelessWidget {
class ButtonOP extends StatelessWidget {
final String op;
final RxString curOP;
final double iconWidth;
final String? icon;
final Color primaryColor;
final double height;
final Function() onTap;
@@ -47,7 +52,7 @@ class ButtonOP extends StatelessWidget {
Key? key,
required this.op,
required this.curOP,
required this.iconWidth,
required this.icon,
required this.primaryColor,
required this.height,
required this.onTap,
@@ -71,15 +76,15 @@ class ButtonOP extends StatelessWidget {
SizedBox(
width: 30,
child: _IconOP(
icon: op,
iconWidth: iconWidth,
op: op,
icon: icon,
margin: EdgeInsets.only(right: 5),
)),
Expanded(
child: FittedBox(
fit: BoxFit.scaleDown,
child: Center(
child: Text('${translate("Continue with")} $op')))),
child: Text('${translate("Continue with")} ${toCapitalized(op)}')))),
],
))),
),
@@ -89,8 +94,8 @@ class ButtonOP extends StatelessWidget {
class ConfigOP {
final String op;
final double iconWidth;
ConfigOP({required this.op, required this.iconWidth});
final String? icon;
ConfigOP({required this.op, required this.icon});
}
class WidgetOP extends StatefulWidget {
@@ -182,7 +187,7 @@ class _WidgetOPState extends State<WidgetOP> {
ButtonOP(
op: widget.config.op,
curOP: widget.curOP,
iconWidth: widget.config.iconWidth,
icon: widget.config.icon,
primaryColor: str2color(widget.config.op, 0x7f),
height: 36,
onTap: () async {
@@ -380,7 +385,7 @@ Future<bool?> loginDialog() async {
final loginOptions = [].obs;
Future.delayed(Duration.zero, () async {
loginOptions.value = await UserModel.queryLoginOptions();
loginOptions.value = await UserModel.queryOidcLoginOptions();
});
final res = await gFFI.dialogManager.show<bool>((setState, close, context) {
@@ -460,12 +465,8 @@ Future<bool?> loginDialog() async {
}
thirdAuthWidget() => Obx(() {
final oidcOptions = loginOptions
.where((opt) => opt.startsWith(kAuthReqTypeOidc))
.map((opt) => opt.substring(kAuthReqTypeOidc.length))
.toList();
return Offstage(
offstage: oidcOptions.isEmpty,
offstage: loginOptions.isEmpty,
child: Column(
children: [
const SizedBox(
@@ -480,12 +481,8 @@ Future<bool?> loginDialog() async {
height: 8.0,
),
LoginWidgetOP(
ops: [
ConfigOP(op: 'GitHub', iconWidth: 20),
ConfigOP(op: 'Google', iconWidth: 20),
ConfigOP(op: 'Okta', iconWidth: 38),
]
.where((op) => oidcOptions.contains(op.op.toLowerCase()))
ops: loginOptions
.map((e) => ConfigOP(op: e['name'], icon: e['icon']))
.toList(),
curOP: curOP,
cbLogin: (Map<String, dynamic> authBody) {