Ejemplo n.º 1
0
        public async Task OpenDatabase(OpenDatabaseRequest request)
        {
            try
            {
                ValidateDbInput(request);
                var(databaseName, changeHandler) = request;

                if (!_ws.State.DbNameToHash.TryGetValue(databaseName, out var dbNameHash))
                {
                    dbNameHash = HmacUtils.SignString(_ws.Keys.HmacKey, databaseName);
                    _ws.State.DbNameToHash[databaseName] = dbNameHash;
                }

                var newDatabaseParams = CreateDatabase(databaseName);
                await OpenDatabaseInternal(dbNameHash, changeHandler, newDatabaseParams);
            } catch (Exception ex) {
                if (!(ex is IError e))
                {
                    throw new UnknownServiceUnavailable(ex);
                }
                switch (e.Name)
                {
                case "ParamsMustBeObject":
                case "DatabaseAlreadyOpening":
                case "DatabaseNameMustBeString":
                case "DatabaseNameMissing":
                case "DatabaseNameCannotBeBlank":
                case "DatabaseNameTooLong":
                case "ChangeHandlerMissing":
                case "ChangeHandlerMustBeFunction":
                case "UserNotSignedIn":
                case "UserNotFound":
                case "TooManyRequests":
                case "ServiceUnavailable":
                    throw;

                default:
                    throw new UnknownServiceUnavailable(ex);
                }
            }
        }
Ejemplo n.º 2
0
        private void ValidateDbInput(OpenDatabaseRequest request)
        {
            var dbName = request.DatabaseName;

            if (string.IsNullOrEmpty(dbName))
            {
                throw new DatabaseNameCannotBeBlank();
            }
            if (dbName.Length > MAX_DB_NAME_CHAR_LENGTH)
            {
                throw new DatabaseNameTooLong(MAX_DB_NAME_CHAR_LENGTH);
            }

            if (_ws.Reconnecting)
            {
                throw new Reconnecting();
            }
            if (!_ws.Keys.Init)
            {
                throw new UserNotSignedIn();
            }
        }