Updated logo

This commit is contained in:
thomashii@dukefirehawk.com 2023-10-08 11:29:28 +08:00
parent c29c7b7049
commit 799f94bb60
23 changed files with 268 additions and 8 deletions

View file

@ -1,6 +1,6 @@
# Angel3 Framework
[![Angel3 Framework](./logo3.png)](https://github.com/dukefirehawk/angel)
[![Angel3 Framework](./angel3_logo.svg)](https://github.com/dukefirehawk/angel)
![Pub Version (including pre-releases)](https://img.shields.io/pub/v/angel3_framework?include_prereleases)
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)

148
angel3_logo.svg Normal file
View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 128 128"
version="1.1"
id="svg1"
inkscape:version="1.3 (0e150ed, 2023-07-21)"
sodipodi:docname="angel3_logo128.svg"
inkscape:export-filename="logo_icon_128.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="1.5862247"
inkscape:cx="58.314563"
inkscape:cy="90.466376"
inkscape:window-width="1312"
inkscape:window-height="738"
inkscape:window-x="128"
inkscape:window-y="89"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<linearGradient
id="swatch6">
<stop
style="stop-color:#d81c1c;stop-opacity:1;"
offset="0"
id="stop6" />
</linearGradient>
<linearGradient
id="linearGradient15"
inkscape:collect="always">
<stop
style="stop-color:#d81c1c;stop-opacity:1;"
offset="0"
id="stop15" />
<stop
style="stop-color:#d81c1c;stop-opacity:0;"
offset="1"
id="stop16" />
</linearGradient>
<linearGradient
id="swatch13"
inkscape:swatch="solid">
<stop
style="stop-color:#d81c1c;stop-opacity:1;"
offset="0"
id="stop14" />
</linearGradient>
<linearGradient
id="swatch7"
inkscape:swatch="solid">
<stop
style="stop-color:#d81c1c;stop-opacity:1;"
offset="0"
id="stop7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#swatch13"
id="linearGradient14"
x1="76.307388"
y1="264.40897"
x2="425.84061"
y2="264.40897"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient15"
id="linearGradient16"
x1="185.07693"
y1="354.51111"
x2="296.18161"
y2="354.51111"
gradientUnits="userSpaceOnUse" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:137.557px;font-family:'Comic Sans MS';-inkscape-font-specification:'Comic Sans MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;opacity:1;fill:#000000;fill-opacity:1;stroke-width:0.716443"
x="-115.63483"
y="107.96973"
id="text1"
transform="matrix(-0.01157892,-1.0160496,0.98407611,-0.01121455,0,0)"><tspan
sodipodi:role="line"
id="tspan1"
x="-115.63483"
y="107.96973"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:137.557px;font-family:'Comic Sans MS';-inkscape-font-specification:'Comic Sans MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke-width:0.716443">A</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:74.3369px;font-family:'Comic Sans MS';-inkscape-font-specification:'Comic Sans MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;opacity:1;fill:#d81c1c;fill-opacity:1;stroke:#ffffff;stroke-width:0.980329;stroke-dasharray:none;stroke-opacity:1"
x="-100.58853"
y="107.32352"
id="text2"
transform="matrix(-1.1771598,0.04030269,0.03112649,0.84843667,0,0)"><tspan
sodipodi:role="line"
id="tspan2"
x="-100.58853"
y="107.32352"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:74.3369px;font-family:'Comic Sans MS';-inkscape-font-specification:'Comic Sans MS, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#d81c1c;fill-opacity:1;stroke:#ffffff;stroke-width:0.980329;stroke-dasharray:none;stroke-opacity:1">3</tspan></text>
<circle
style="fill:#d81c1c;fill-opacity:1;stroke:#ffffff;stroke-width:3.00094488;stroke-dasharray:none"
id="path6"
cx="25.217106"
cy="52.325504"
r="3.7825663" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 6 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

BIN
logo3.xcf

Binary file not shown.

BIN
logo_icon_512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -108,6 +108,8 @@ abstract class Driver<
/// Handles a single request.
Future handleRawRequest(Request request, Response response) {
app.logger.info('[Server] Called handleRawRequest');
return createRequestContext(request, response).then((req) {
return createResponseContext(request, response, req).then((res) {
Future handle() {

View file

@ -20,8 +20,8 @@ In your `pubspec.yaml`:
```yaml
dependencies:
angel3_framework: ^6.0.0
angel3_oauth2: ^6.0.0
angel3_framework: ^8.0.0
angel3_oauth2: ^8.0.0
```
## Usage

View file

@ -0,0 +1,94 @@
import 'dart:async';
import 'package:angel3_container/mirrors.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_oauth2/angel3_oauth2.dart';
import 'package:logging/logging.dart';
import '../test/common.dart';
void main() {
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((record) {
print(
'${record.time} ${record.level.name.padLeft(6, ' ')} [${record.loggerName}] : ${record.message}');
if (record.error != null) print(record.error);
if (record.stackTrace != null) print(record.stackTrace);
});
// Declae the function
void setUp() async {
var app = Angel(reflector: MirrorsReflector());
var oauth2 = _AuthorizationServer();
app.group('/oauth2', (router) {
router
..get('/authorize', oauth2.authorizationEndpoint)
..post('/token', oauth2.tokenEndpoint);
});
//app.logger.level = Level.ALL;
app.logger = Logger("oauth2")
..onRecord.listen((rec) {
print(rec);
if (rec.error != null) print(rec.error);
if (rec.stackTrace != null) print(rec.stackTrace);
});
app.errorHandler = (e, req, res) async {
res.json(e.toJson());
};
}
setUp();
}
class _AuthorizationServer
extends AuthorizationServer<PseudoApplication, PseudoUser> {
var logger = Logger('AuthorizationServer');
@override
PseudoApplication? findClient(String? clientId) {
return clientId == pseudoApplication.id ? pseudoApplication : null;
}
@override
Future<bool> verifyClient(
PseudoApplication client, String? clientSecret) async {
return client.secret == clientSecret;
}
@override
FutureOr<DeviceCodeResponse> requestDeviceCode(PseudoApplication client,
Iterable<String> scopes, RequestContext req, ResponseContext res) {
return DeviceCodeResponse(
'foo',
'bar',
Uri.parse('https://regiostech.com')
.replace(queryParameters: {'scopes': scopes.join(',')}),
3600);
}
@override
FutureOr<AuthorizationTokenResponse> exchangeDeviceCodeForToken(
PseudoApplication client,
String? deviceCode,
String state,
RequestContext req,
ResponseContext res) {
print("[Server] exchangeDeviceCodeForToken");
print("[Server] $deviceCode");
print("[Server] $client");
if (deviceCode == 'brute') {
print("[Server] Throws AuthorizationException");
throw AuthorizationException(ErrorResponse(
ErrorResponse.slowDown,
'Ho, brother! Ho, whoa, whoa, whoa now! You got too much dip on your chip!',
state));
}
return AuthorizationTokenResponse('foo');
}
}

View file

@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:convert';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:logging/logging.dart';
import 'exception.dart';
import 'pkce.dart';
import 'response.dart';
@ -51,6 +52,8 @@ Future<Iterable<String>> _getScopes(RequestContext req,
/// An OAuth2 authorization server, which issues access tokens to third parties.
abstract class AuthorizationServer<Client, User> {
static Logger logger = Logger('AuthorizationServer');
const AuthorizationServer();
static const String _internalServerError =

View file

@ -11,10 +11,11 @@ dependencies:
angel3_http_exception: ^8.0.0
crypto: ^3.0.1
collection: ^1.17.0
logging: ^1.2.0
dev_dependencies:
angel3_validate: ^8.0.0
angel3_test: ^8.0.0
logging: ^1.2.0
angel3_container: ^8.0.0
oauth2: ^2.0.0
lints: ^2.1.0
test: ^1.24.0

View file

@ -1,4 +1,5 @@
import 'dart:async';
import 'package:angel3_container/mirrors.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_test/angel3_test.dart';
import 'package:angel3_oauth2/angel3_oauth2.dart';
@ -10,7 +11,7 @@ void main() {
late TestClient client;
setUp(() async {
var app = Angel();
var app = Angel(reflector: MirrorsReflector());
var oauth2 = _AuthorizationServer();
app.group('/oauth2', (router) {
@ -19,7 +20,8 @@ void main() {
..post('/token', oauth2.tokenEndpoint);
});
app.logger = Logger('angel_oauth2')
//app.logger.level = Level.ALL;
app.logger = Logger("oauth2")
..onRecord.listen((rec) {
print(rec);
if (rec.error != null) print(rec.error);
@ -113,7 +115,8 @@ void main() {
'device_code': 'brute',
});
print(response.body);
print("[Client] ${response.headers}");
print("[Client] ${response.body}");
expect(
response,
allOf(
@ -130,6 +133,8 @@ void main() {
class _AuthorizationServer
extends AuthorizationServer<PseudoApplication, PseudoUser> {
var logger = Logger('AuthorizationServer');
@override
PseudoApplication? findClient(String? clientId) {
return clientId == pseudoApplication.id ? pseudoApplication : null;
@ -159,7 +164,13 @@ class _AuthorizationServer
String state,
RequestContext req,
ResponseContext res) {
print("[Server] exchangeDeviceCodeForToken");
print("[Server] $deviceCode");
print("[Server] $client");
if (deviceCode == 'brute') {
print("[Server] Throws AuthorizationException");
throw AuthorizationException(ErrorResponse(
ErrorResponse.slowDown,
'Ho, brother! Ho, whoa, whoa, whoa now! You got too much dip on your chip!',

View file

@ -1,5 +1,6 @@
import 'dart:async';
import 'dart:collection';
import 'package:angel3_container/mirrors.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_oauth2/angel3_oauth2.dart';
@ -14,7 +15,7 @@ void main() {
late TestClient testClient;
setUp(() async {
app = Angel();
app = Angel(reflector: MirrorsReflector());
app.container.registerSingleton(AuthCodes());
var server = _Server();