// check token by client public key func ProcAuth(handler *coreprocessing.Handler, inIns *coreprocessing.CoreInstruction) *coreprocessing.CoreInstruction { // client sends in params: // - json: {"key": "<key name>"} // - data: "<base64 token string, use JWT protocol (random data inside)>" // getting (search on option.KeyDir) client public key by name (in command params) handler.Stat.AddOneMsg("auth_request") changes := connectionsupport.StateChanges{ ChangeType: connectionsupport.StateChangesTypeAuth} var result *coreprocessing.CoreInstruction var resultErr error var errCode int if cmd, exists := inIns.GetCommand(); exists { if authData, err := newAuthData(cmd.Params); err == nil { if err := authData.Check(handler.Option); err != nil { errCode = transport.ErrorCodeMethodAuthFailed resultErr = err } } else { resultErr = err errCode = transport.ErrorCodeMethodParamsFormatWrong } } else { errCode = transport.ErrorCodeCommandFormatWrong resultErr = errors.New("Not found command in instruction.") } var answer *transport.Answer var insType int if errCode > 0 { changes.Auth = false answer = inIns.MakeErrAnswer(errCode, fmt.Sprint(resultErr)) insType = coreprocessing.TypeInstructionProblem rllogger.Outputf(rllogger.LogWarn, "Failed auth from %s with error: %s", inIns.Cid, resultErr) } else { changes.Auth = true handler.Stat.AddOneMsg("auth_successfull") answer = inIns.MakeOkAnswer("{\"auth\":true}") insType = coreprocessing.TypeInstructionOk rllogger.Outputf(rllogger.LogDebug, "Successfull auth from %s", inIns.Cid) } result = coreprocessing.NewCoreInstruction(insType) result.SetAnswer(answer) result.StateChanges = &changes return result }