xref: /haiku/src/apps/haikudepot/model/Captcha.cpp (revision 04d1d2da0b27294f0f1e623071df310a0820d4b6)
1 /*
2  * Copyright 2019, Andrew Lindesay <apl@lindesay.co.nz>.
3  *
4  * All rights reserved. Distributed under the terms of the MIT License.
5  */
6 #include "Captcha.h"
7 
8 #include <stdio.h>
9 
10 #include <DataIO.h>
11 
12 // These are keys that are used to store this object's data into a BMessage
13 // instance.
14 
15 #define KEY_TOKEN			"token"
16 #define KEY_PNG_IMAGE_DATA	"pngImageData"
17 
18 
19 Captcha::Captcha(BMessage* from)
20 	:
21 	fToken(""),
22 	fPngImageData(NULL)
23 {
24 	if (from->FindString(KEY_TOKEN, &fToken) != B_OK) {
25 		printf("expected key [%s] in the message data when creating a "
26 			"Captcha\n", KEY_TOKEN);
27 	}
28 
29 	const void* data;
30 	ssize_t len;
31 
32 	if (from->FindData(KEY_PNG_IMAGE_DATA, B_ANY_TYPE, &data, &len) != B_OK)
33 		printf("expected key [%s] in the message data\n", KEY_PNG_IMAGE_DATA);
34 	else
35 		SetPngImageData(data, len);
36 }
37 
38 
39 Captcha::Captcha()
40 	:
41 	fToken(""),
42 	fPngImageData(NULL)
43 {
44 }
45 
46 
47 Captcha::~Captcha()
48 {
49 	delete fPngImageData;
50 }
51 
52 
53 const BString&
54 Captcha::Token() const
55 {
56 	return fToken;
57 }
58 
59 
60 BPositionIO*
61 Captcha::PngImageData() const
62 {
63 	return fPngImageData;
64 }
65 
66 
67 void
68 Captcha::SetToken(const BString& value)
69 {
70 	fToken = value;
71 }
72 
73 
74 void
75 Captcha::SetPngImageData(const void* data, size_t len)
76 {
77 	if (fPngImageData != NULL)
78 		delete fPngImageData;
79 	fPngImageData = NULL;
80 	if (data != NULL) {
81 		fPngImageData = new BMallocIO();
82 		fPngImageData->Write(data, len);
83 	}
84 }
85 
86 
87 status_t
88 Captcha::Archive(BMessage* into, bool deep) const
89 {
90 	status_t result = B_OK;
91 	if (result == B_OK && into == NULL)
92 		result = B_ERROR;
93 	if (result == B_OK)
94 		result = into->AddString(KEY_TOKEN, fToken);
95 	if (result == B_OK && fPngImageData != NULL) {
96 		result = into->AddData(KEY_PNG_IMAGE_DATA, B_ANY_TYPE,
97 			fPngImageData->Buffer(), fPngImageData->BufferLength());
98 	}
99 	return result;
100 }