예제 #1
0
파일: AuthServer.cs 프로젝트: radtek/safeid
 void newItem_OnUserValidate(IPEndPoint client, string username, string password, ref AuthUserResult result)
 {
     if (OnUserValidate != null)
     {
         OnUserValidate(client, username, password, ref result);
     }
 }
예제 #2
0
        private void EsperaPacotes()
        {
            while (_isRunning)
            {
                try
                {
                    packet pkt = recebe_pacote(_mainSock);

                    if (pkt == null)
                    {
                        Dispose();
                        return;
                    }

                    switch (pkt.operacao)
                    {
                    case FWAUT_OP_PING:
                        envia_pacote(_mainSock, null, 0, FWAUT_OP_PING, FWAUT_ST_OK);
                        Dispose();
                        break;

                    case FWAUT_OP_REQ:
                    case FWAUT_OP_REQ_GROUPS:
                        //Retorna os grupos que o usuário existe
                        //return FWAUT_ST_OK - Autenticacao OK
                        //return FWAUT_ST_BAD_PWD - Senha invalida
                        //return FWAUT_NO_USER - Usuario inexistente
                        String[] request = Encoding.ASCII.GetString(pkt.body).Trim("\0".ToCharArray()).Split("\0".ToCharArray());

                        //AuthUserResult res = _users.ValidaUser(request[0], request[1]);

                        AuthUserResult res = new AuthUserResult(request[0]);
                        if (OnUserValidate != null)
                        {
                            OnUserValidate(_remoteEP, request[0], request[1], ref res);
                        }

                        ushort status = FWAUT_ST_OK;
                        Byte[] grpRet = new Byte[0];
                        switch (res.Result)
                        {
                        case AuthResult.OK:
                            status = FWAUT_ST_OK;
                            String grupos = "";
                            foreach (String item in res.Groups)
                            {
                                grupos += item + "\0";
                            }
                            grupos += "\0\0";
                            grpRet  = Encoding.GetEncoding(869).GetBytes(grupos);
                            break;

                        case AuthResult.BadPassword:
                            status = FWAUT_ST_BAD_PWD;
                            break;

                        case AuthResult.NoUser:
                            status = FWAUT_ST_NO_USER;
                            break;
                        }


                        envia_pacote(_mainSock, grpRet, grpRet.Length, pkt.operacao, status);
                        break;


                    case FWAUT_OP_GET_USERS:
                        List <String> users = new List <String>();

                        if (OnListUsers != null)
                        {
                            OnListUsers(_remoteEP, ref users);
                        }

                        String tstU = "";
                        foreach (String item in users)
                        {
                            tstU += item + "\0";
                        }
                        tstU += "\0\0";

                        Byte[] usr = Encoding.GetEncoding(869).GetBytes(tstU);
                        envia_pacote(_mainSock, usr, usr.Length, FWAUT_OP_GET_USERS, FWAUT_ST_OK);
                        //trata_lst_users(ns);
                        break;

                    case FWAUT_OP_GET_GROUPS:
                        List <String> groups = new List <String>();

                        if (OnListGroups != null)
                        {
                            OnListGroups(_remoteEP, ref groups);
                        }

                        String tst = "";
                        foreach (String item in groups)
                        {
                            tst += item + "\0";
                        }
                        tst += "\0\0";

                        //Teste de encoding do FW
                        Byte[] tmp = new Byte[0];
                        foreach (EncodingInfo encInfo in Encoding.GetEncodings())
                        {
                            Int32  offSet = tmp.Length;
                            Byte[] b      = encInfo.GetEncoding().GetBytes(encInfo.CodePage.ToString() + ": ção");
                            Array.Resize(ref tmp, offSet + (b.Length + 1));
                            Array.Copy(b, 0, tmp, offSet, b.Length);
                            tmp[b.Length + offSet] = 0;
                        }

                        Byte[] grp = Encoding.GetEncoding(869).GetBytes(tst);
                        //Byte[] grp = tmp;
                        envia_pacote(_mainSock, grp, grp.Length, FWAUT_OP_GET_GROUPS, FWAUT_ST_OK);
                        //trata_lst_groups(ns);
                        break;

                    case FWAUT_OP_GET_SKEY:
                        /*
                         * if (len != sizeof(ag_get_skey))
                         * {
                         *  if ((erro = envia_pacote(ns, NULL, 0, op, FWAUT_ST_ERROR)) != 0)
                         *  {
                         *      if (erro == 2)
                         *          syslog(fila | LOG_ERR, "%s\n", ag_msg[AG_MSG_ERRO_MEMORIA]);
                         *      exit(1);
                         *  }
                         * }
                         * else
                         * {
                         *  retorna_opie(ns, (ag_get_skey*)dados);
                         * }*/
                        envia_pacote(_mainSock, null, 0, pkt.operacao, FWAUT_ST_ERROR);
                        break;

                    default:
                        envia_pacote(_mainSock, null, 0, pkt.operacao, FWAUT_ST_ERROR);
                        break;
                    }
                }
                catch {
                    _isRunning = false;
                }
            }
        }