scolengo_api

Creator: coderz1093

Last updated:

0 purchases

scolengo_api Image
scolengo_api Images
Add to Cart

Description:

scolengo api

scolengo-api-dart #
Unofficial Dart API Wrapper for the Skolengo education management system. Heavily inspired from scolengo-api
Since I don't have access to the entire API, some features or fields may be missing. Feel free to contribute.
Example: #
This should work in the command line.

If you get stuck after the authorization


Add urlLancher: (url) => print(url) to the Authenticator


Paste the given URL in a browser that already has devtools open on the networking page


Copy the URL of the 2nd request ( sko-app://sign-in-callback?code=... )


Open a new browser tab and paste the url, replacing sko-app:// with localhost:3000/


It should work.


We can't provide localhost:3000 as redirectUri because then we get an error from the CAS



import 'dart:convert';
import 'dart:io';

import 'package:openid_client/openid_client_io.dart';
import 'package:scolengo_api/src/models/School/school.dart';
import 'package:scolengo_api/src/skolengo.dart';

void main() async {
final Credential credentials;
final School school;

final client = Skolengo.unauthenticated();
final schools = await client.searchSchool('Lycée ...');
school = schools.data[0];
credentials = await createCredentials(school);

//It's a good idea to save the credentials and school as JSON here

final client = Skolengo.fromCredentials(credentials, school);

//You should be able to use the client now
}

Future<Credential> createCredentials(School school, [Skolengo? client]) async {
client ??= Skolengo.unauthenticated();
final oidclient = await client.getOIDClient(school);
final f = Flow.implicit(oidclient);
final authenticator = Authenticator(
oidclient,
redirectUri: Uri.parse('skoapp-prod://sign-in-callback'),
);
return authenticator.authorize();
}
copied to clipboard
If you want to use this in a flutter app, change the createCredentials function according to the openid_client documentation
Caching the API responses #
This library comes with a pretty flexible interface for you to be able to implement your own cache provider.
As some requests take quite a long time to complete, it might be a good idea to cache the result, in memory, a JSON file, a db or anything else really
For more details look at the comments in cache_provider.dart

Example
A cache provider storing the responses in JSON files #
This is not a great idea, the example isn't complete and it was written in a rush but this should give a rough idea of how things should be structured.
class FSCacheProvider extends CacheProvider {
Map<String, String> _index = {};

@override
Future<String> get(String key) async {
return await File(filename(key)).readAsString();
}

@override
bool raw() => false;

@override
void set(String key, String value) {
_index[filename(key)] = DateTime.now().toIso8601String();
File('./cache/index.json').createSync(recursive: true);
File('./cache/index.json').writeAsString(jsonEncode(_index));
File(filename(key))
..createSync(recursive: true)
..writeAsString(value);
}

@override
Future<bool> shouldUseCache(String key) async {
//TODO compare dates
return _index.keys.contains(filename(key));
}

String filename(String url) {
return './cache${Uri.parse(url).path}/${Uri.parse(url).query}.json';
}

init() {
_index = File('./cache/index.json').existsSync()
? jsonDecode(File('./cache/index.json').readAsStringSync())
.map<String, String>(
(key, value) => MapEntry(key as String, value as String))
: {};
File('.cache/index.json').createSync(recursive: true);
}
}
copied to clipboard

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.

Related Products

More From This Creator