Ejemplo n.º 1
0
        public async Task <AuthData.Response> SaveData(LambdaAuthArg data)
        {
            var resp = new AuthData.Response()
            {
                status = AuthError.E_CHAOS.ToString()
            };
            var userData = new UserData("", data.userProfile.uid);
            var sess     = new UserData.Session(userData.profile, data.sessCode);

            try {
                // セッションチェック
                if (await RedisClientHelper.CheckValueEqual
                        (m_ctx, data.redisApiUrl, data.redisApiKey, sess.keyField, sess.valueField) != RedisError.E_OK)
                {
                    resp.status = AuthError.E_SESS_INVALID.ToString();
                    return(resp);
                }

                // S3からGUIDを取得
                using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APNortheast1))
                {
                    var s3Req = new GetObjectRequest
                    {
                        BucketName = data.s3Bucket,
                        Key        = UserData.GetS3PathFromUid(data.s3DirObject, userData.profile.uid),
                    };
                    var s3Resp = await s3Client.GetObjectAsync(s3Req);

                    using (var s3Stream = new StreamReader(s3Resp.ResponseStream)){
                        var dataBody = s3Stream.ReadToEnd();
                        userData.Import(dataBody);
                    }
                }

                // 引き継ぎコードをRedisにセット
                var takeover = new UserData.TakeoverCode(userData.profile);
                var redisRet = await RedisClientHelper.Set(m_ctx, data.redisApiUrl, data.redisApiKey,
                                                           takeover.keyField, takeover.valueField, takeover.ttlSec);

                if (redisRet == RedisError.E_OK)
                {
                    resp.status       = AuthError.E_OK.ToString();
                    resp.takeoverCode = takeover.takeoverCode;
                }
                else
                {
                    resp.status = AuthError.E_TAKEOVER_ISSUE.ToString();
                    resp.meta   = redisRet.ToString();
                    m_ctx.Log(resp.status.ToString() + "," + resp.meta);
                }
            }
            catch (Exception ex) {
                m_ctx.Log(ex.Message);
                resp.status = AuthError.E_CRITICAL.ToString();
                resp.meta   = ex.Message;
            }

            return(resp);
        }
Ejemplo n.º 2
0
        // Guidでログイン
        public async Task <AuthData.Response> Login(LambdaAuthArg data)
        {
            var resp = new AuthData.Response()
            {
                status = AuthError.E_CHAOS.ToString()
            };
            var userData = new UserData(data.userProfile.guid);

            try{
                using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APNortheast1))
                {
                    // まず、S3にUIDに対応したプロファイルがあるかチェック
                    var s3Req = new GetObjectRequest
                    {
                        BucketName = data.s3Bucket,
                        Key        = UserData.GetS3PathFromUid(data.s3DirObject, userData.profile.uid),
                    };
                    var s3Resp = await s3Client.GetObjectAsync(s3Req);

                    using (var s3Stream = new StreamReader(s3Resp.ResponseStream)){
                        var dataBody = s3Stream.ReadToEnd();
                        userData.Import(dataBody);
                    }

                    var sess = new UserData.Session(userData.profile);

                    // Sessionを発行して、Redisサーバに登録
                    var redisRet = await RedisClientHelper.Set(m_ctx, data.redisApiUrl, data.redisApiKey,
                                                               sess.keyField, sess.valueField, sess.ttlSec);

                    if (redisRet == RedisError.E_OK)
                    {
                        resp.status      = AuthError.E_OK.ToString();
                        resp.userProfile = userData.profile;
                        resp.sessCode    = sess.sessCode;
                    }
                    else
                    {
                        resp.status = AuthError.E_SESS_ISSUE.ToString();
                        resp.meta   = redisRet.ToString();
                        m_ctx.Log(resp.status.ToString() + "," + resp.meta);
                    }
                }
            }
            catch (Exception ex) {
                m_ctx.Log(ex.Message);
                resp.status = AuthError.E_CRITICAL.ToString();
                resp.meta   = ex.Message;
            }

            return(resp);
        }
Ejemplo n.º 3
0
        public async Task <AuthData.Response> Regist(LambdaAuthArg data)
        {
            var resp = new AuthData.Response()
            {
                status = AuthError.E_CHAOS.ToString()
            };
            var userData = UserData.CreateNewUser();

            try {
                using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APNortheast1))
                {
                    // まず、S3にUIDに対応したプロファイルを保存
                    var s3Req = new PutObjectRequest
                    {
                        BucketName  = data.s3Bucket,
                        Key         = UserData.GetS3PathFromUid(data.s3DirObject, userData.profile.uid),
                        ContentType = @"application/json",
                        ContentBody = userData.Export()
                    };
                    var s3Resp = await s3Client.PutObjectAsync(s3Req);

                    var sess = new UserData.Session(userData.profile);

                    // Sessionを発行して、Redisサーバに登録
                    var redisRet = await RedisClientHelper.Set(m_ctx, data.redisApiUrl, data.redisApiKey,
                                                               sess.keyField, sess.valueField, sess.ttlSec);

                    if (redisRet == RedisError.E_OK)
                    {
                        resp.status      = AuthError.E_OK.ToString();
                        resp.userProfile = userData.profile;
                        resp.sessCode    = sess.sessCode;
                    }
                    else
                    {
                        resp.status = AuthError.E_SESS_ISSUE.ToString();
                        resp.meta   = redisRet.ToString();
                        m_ctx.Log(resp.status.ToString() + "," + resp.meta);
                    }
                }
            }
            catch (Exception ex) {
                m_ctx.Log(ex.Message);
                resp.status = AuthError.E_CRITICAL.ToString();
                resp.meta   = ex.Message;
            }

            return(resp);
        }