public async Task AddToken(string token, ClaimsIdentity identity, TimeSpan expiry)
        {
            string key     = GetKey(token);
            var    redisDb = await redis.GetDatabase();

            var stream = new MemoryStream();
            var writer = new BinaryWriter(stream);

            identity.WriteTo(writer);
            stream.Seek(0, SeekOrigin.Begin);
            byte[] value = stream.ReadToEnd();
            await redisDb.StringSetAsync(key, value, expiry : expiry);
        }
        async Task <string> UploadJobBuildOutput(FlowSnake jobId)
        {
            var db = await redis.GetDatabase();

            // 2MiB
            const int maxLength   = 2 * 1024 * 1024;
            string?   buildOutput = await db.StringGetRangeAsync(FormatJobStdout(jobId), -maxLength, -1);

            string?buildError = await db.StringGetRangeAsync(FormatJobError(jobId), -maxLength, -1);

            var res = new JobBuildOutput
            {
                Output = buildOutput,
                Error  = buildError
            };
            var stringified = JsonSerializer.SerializeToUtf8Bytes(res, jsonSerializerOptions);

            using var scope = scopeProvider.CreateScope();
            var fileBucket = scope.ServiceProvider.GetService <SingleBucketFileStorageService>();

            var filename = $"job/{jobId}/build_output.json";

            await fileBucket.UploadFile(filename, new MemoryStream(stringified), stringified.LongLength);

            await db.KeyDeleteAsync(
                new RedisKey[] { FormatJobStdout(jobId), FormatJobError(jobId) },
                flags : CommandFlags.FireAndForget);

            return(filename);
        }
Beispiel #3
0
        public async Task <string?> CheckCacheString(
            string section,
            string key)
        {
            var redisKey = FormatRedisKey(section, key);
            var db       = await redis.GetDatabase();

            var val = await db.StringGetAsync(redisKey);

            if (val.IsNull)
            {
                return(null);
            }
            else
            {
                return(val);
            }
        }
        public async ValueTask <bool> AuthenticateAsync(string token)
        {
            string key = $"auth:judger:{token}";

            var redisDb = await redis.GetDatabase();

            var res = await redisDb.StringGetAsync(key);

            if (res.IsNullOrEmpty)
            {
                var db          = serviceProvider.GetService <RurikawaDb>();
                var valueExists = await db.Judgers.Where(judger => judger.Id == token)
                                  .AnyAsync();

                if (valueExists)
                {
                    await redisDb.StringSetAsync(
                        key,
                        "1",
                        expiry : redisKeyLifetime,
                        flags : CommandFlags.FireAndForget);
                }
                else
                {
                    await redisDb.StringSetAsync(
                        key,
                        "0",
                        expiry : redisKeyLifetime,
                        flags : CommandFlags.FireAndForget);
                }

                return(valueExists);
            }
            else
            {
                if (res == "0")
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
        }