// This example shows when and how to use the warn log level. func Example_warn() error { expiryCondition := true // ... // check condition in server package, error is not handled on the server if !expiryCondition { return log.Warnf("server: token has expired") } return nil }
func (ce *CtrlEngine) procInQueue(c *cli.Context, host string) error { log.Debug("procInQueue()") for { // get message from msgDB iqIdx, myID, contactID, msg, envelope, err := ce.msgDB.GetInQueue() if err != nil { return err } if myID == "" { log.Debug("no more messages in inqueue") break // no more messages in inqueue } if envelope { log.Debugf("decrypt envelope (iqIdx=%d)", iqIdx) // decrypt envelope message, err := base64.Decode(msg) if err != nil { return log.Error(err) } privkey, server, secret, _, _, _, err := ce.msgDB.GetAccount(myID, contactID) if err != nil { return err } receiveTemplate := nymaddr.AddressTemplate{ Secret: secret[:], } var pubkey [32]byte copy(pubkey[:], privkey[32:]) dec, nym, err := mixcrypt.ReceiveFromMix(receiveTemplate, util.MailboxAddress(&pubkey, server), message) if err != nil { return log.Error(err) } if !bytes.Equal(nym, cipher.SHA256([]byte(myID))) { // discard message log.Warnf("ctrlengine: hashed nym does not match %s -> discard message", myID) if err := ce.msgDB.DelInQueue(iqIdx); err != nil { return err } } else { log.Info("envelope successfully decrypted") err := ce.msgDB.SetInQueue(iqIdx, base64.Encode(dec)) if err != nil { return err } } } else { log.Debugf("decrypt message (iqIdx=%d)", iqIdx) senderID, plainMsg, err := mutecryptDecrypt(c, ce.passphrase, []byte(msg), ce.fileTable.StatusFP) if err != nil { return err } if senderID == "" { // message could not be decrypted, but we do not want to fail if err := ce.msgDB.DelInQueue(iqIdx); err != nil { return err } continue } // check if contact exists contact, _, contactType, err := ce.msgDB.GetContact(myID, senderID) if err != nil { return log.Error(err) } // TODO: we do not have to do request UID message from server // here, but we should use the one contained in the message and // compare it with hash chain entry (doesn't compromise anonymity) var drop bool if contact == "" { err := ce.contactAdd(myID, senderID, "", host, msgdb.GrayList, c) if err != nil { return log.Error(err) } } else if contactType == msgdb.BlackList { // messages from black listed contacts are dropped directly log.Debug("message from black listed contact dropped") drop = true } err = ce.msgDB.RemoveInQueue(iqIdx, plainMsg, senderID, drop) if err != nil { return err } } } return nil }