Loading...
bobekabg avatar bobekabg 30 Точки

3. AJAX Request Validator [JS Retake - 11 May 2016]

Здравейте, подхванах да решавам малко задачи от минали изпити и тази ме измъчва от вчера. Хващам 70/100 точки, а не са дадени тестовете. Ще съм благодарен ако някой може да помогне! smiley

JS Retake - 11 May 2016

Ето го решението ми:

PASTEBIN

function ajaxRequestValidator(arr) {
    let regexHashPattern = /(\d+)([a-zA-Z]{1})/g
    let hashPattern = {
        full: arr.pop(),
        patterns: [],
        matches: null
    }
    while((hashPattern.matches = regexHashPattern.exec(hashPattern.full)) !== null) {
        hashPattern.patterns.push({
            symbol: hashPattern.matches[2],
            count: Number(hashPattern.matches[1])
        })
    }

    let methodPattern = /Method: (GET|POST|PUT|DELETE)$/
    let authPattern = /Credentials: (Bearer|Basic) ([a-zA-Z0-9]+)$/
    let contentPattern = /Content: ([a-zA-Z0-9.]+)$/

    let request = null

    for (let i = 0; i < arr.length; i += 3) {
        arr[i] = arr[i]
        let methodMatches = methodPattern.exec(arr[i])
        let authMatches = authPattern.exec(arr[i + 1])
        let contentMatches = contentPattern.exec(arr[i + 2])

        if(methodMatches === null || authMatches === null || contentMatches === null) {
            console.log(`Response-Code:400`)
            continue
        }

        request = {
            method: methodMatches[1],
            authType: authMatches[1],
            authContent: authMatches[2]
        }

        if(request.method !== 'GET' && request.authType !== 'Bearer') {
            console.log(`Response-Method:${request.method}&Code:401`)
            continue
        }

        if(checkAuth(request)) {
            console.log(`Response-Method:${request.method}&Code:200&Header:${request.authContent}`)
        } else {
            console.log(`Response-Method:${request.method}&Code:403`)
        }
    }
    function checkAuth(request) {
        for (let i = 0; i < hashPattern.patterns.length; i++) {
            let patternSymbol = hashPattern.patterns[i].symbol.toLowerCase()
            let patternCount = hashPattern.patterns[i].count

            let symbolCount = 0
            for (let j = 0; j < request.authContent.length; j++) {
                if(patternSymbol === request.authContent[j].toLowerCase()) {
                    symbolCount++
                }
            }
            if(symbolCount === patternCount) {
                return true
            }
        }
        return false
    }
}

 

Тагове:
0
JavaScript Fundamentals 27/09/2016 13:55:24
viktor.pts avatar viktor.pts SoftUni Team Trainer 332 Точки

Какво правиш ако ти искат токена да съдържа 0 от определен символ?

0
bobekabg avatar bobekabg 30 Точки
//Тази променлива пази колко пъти се е срещнал символа в токена и започва от 0
let symbolCount = 0
for (let j = 0; j < request.authContent.length; j++) {
    if(patternSymbol === request.authContent[j]) {
        symbolCount++
    }
}
//Ако ми искат 0 пъти да се среща даден символ и дадения токен изпълнява условието то "symbolCount" ще си остане 0 и проверката ще върне true
if(symbolCount === patternCount) {
    return true
}

 

0
Sanity avatar Sanity Trainer 194 Точки

"Any input request that doesn’t follow the, specified above - format, is to be treated as invalid."

Valid Input:

Method: ...
Credentials: ...
Content: ...
 

Invalid input:

Method: ...
     Credentials: ...
   Content: ...

Надявам се да ти е достатъчен hint ... Извинявам се, че зверското ми творение (изпита по JavaScript) продължава да набира жертви :D Поздравления за ентусиазма и смелоста да се опиташ да го решиш :P.

0
bobekabg avatar bobekabg 30 Точки

Благодаря за hint-a, 100/100

Задачата не е много гадна ако си я пишеш на спокойствие... Този вариант с некоректните данни го бях предвидил, но не се сетих, че с моя pattern не хващам началото на стринга...

0
27/09/2016 15:32:22
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.